vb6 "regfreecom" автосоздание манифеста для файла ocx - PullRequest
0 голосов
/ 07 мая 2020

Я думаю, мне нужно создать файл манифеста для MSCOMCTL.ocx, чтобы использовать его в моем приложении VB6 (reg free) Мне также нужно будет обновить / создать файл .res. Затем мне нужно будет использовать ManifestCreatorII. Прошло несколько лет (2017 г.), я забыл шаги и не могу найти свои старые заметки. Я помню, как работать с NSI для создания установочного пакета. Без этого я не могу заставить свои приложения работать на новой Win 10 P C.

My Development P C - это виртуальный P C с запущенным Windows XP (32 бит) Service Pack 3 . Я программирую с помощью Visual Basi c 6.0 (SP6).

Работа над этими экспериментами научила меня, что мне НЕ действительно нужны файлы манифеста для каждого из используемых файлов зависимостей .ocx для компонентов в моих программах VB6.

Мне действительно нужен только один файл манифеста для всей прикладной программы, который используется для создания файла ресурсов для проекта.

Моя проблема впервые было указано, когда я установил пакет NSIS и запустил его программу VB6 на новом Win10 (64) P C:

Run-time error 339: Component 'MSCOMCTL.OCX' or one of its dependencies not correctly registered: a file is missing or invalid

Я получил это сообщение об ошибке, когда попытался открыть одну из недавно добавленных форм.

Уникальной особенностью этой формы является использование элементов управления диалогом с вкладками (TabStrip), которые ссылаются на MSCOMCTL.ocx.

re: https://www.processlibrary.com/en/directory/files/mscomctl/19764/

mscomctl.ocx is an ActiveX Control module that contains common controls used by Windows, such as ImageCombo, ImageList, ListView, ProgressBar, Slider, StatusBar, TabStrip, ToolBar, and TreeView controls.

* 102 7 * Я создал крошечную программу zMSCOMCTL, которая имеет одну форму, содержащую только два элемента управления (TabStrip и ProgressBar), оба из одного компонента MSCOMCTL.ocx.

Я использовал плагиат из кода VB6 и NSIS моих похожих крошечных программ (например: zRichTx, zThreeD, zCOMDLG).

Когда я устанавливаю и пытаюсь запустить zMSCOMCTL на моем новом Win10 (64) P C, я получаю то же сообщение об ошибке: Ошибка выполнения 339: Компонент 'MSCOMCTL.OCX' или одна из его зависимостей неправильно зарегистрирована: файл отсутствует или недействителен

Я загрузил копию MSCOMCTL.ocx версии 6.1.98.46 из https://www.ocxme.com

Эти инструкции основаны на: https://originaldll.com/file/mscomctl.ocx/16903.html

  • Сделал резервную копию: C:\WINDOWS\system32\MSCOMCTL.*
  • В окне командной строки: regsvr32 /u MSCOMCTL.ocx
  • Удалено C:\WINDOWS\system32\MSCOMCTL.*
  • Скопировано новое MSCOMCTL.ocx в C:\WINDOWS\system32
  • ПЕРЕЗАГРУЗИТЬ
  • В окне командной строки: regsvr32 MSCOMCTL.ocx

ПЕРВЫЙ пробный метод:

A. создать MSCOMCTL.ocx.manifest:

  • В окне командной строки: regsvr42 MSCOMCTL.ocx
  • Я использовал NotePad ++ для изменения
    • .sxs. изменено на .ocx.
    • type="win32" изменено на processorArchitecture="x86" type="win32"
    • <file name="MSCOMCTL.ocx"> изменено на <file name="Dependencies\MSCOMCTL.ocx">

Чтобы повысить шансы ManifestCreatorv2. 0.3 принимает файл MSCOMCTL.ocx.manifest вместо того, чтобы требовать копию ClipBoard. (Без символов или пробелов)

  • Сначала отредактируйте MSCOMCTL.ocx.manifest с помощью Notepad ++
  • Выберите все, скопируйте, вставьте в Блокнот и сохраните в MSCOMCTL.ocx.manifest

Б. Создать файл zMSCOMCTL.exe.manifest

  • Открыть ManifestCreatorv2.0.3:
  • Манифест> Создать из файла проекта (vbp) zMSCOMCTL.vbp
  • Манифест> Добавить / Манифест слияния - из файла MSCOMCTL.ocx.manifest
  • Манифест> Экспорт манифеста - Файл целевого диска
  • сохранить в zMSCOMCTL.exe.manifest (Заменить)

re: http://www.vbforums.com/showthread.php?845909-VB6-Manifest-Creator-II

C. Создайте zMSCOMCTL.res

  • Завершите работу проекта zMSCOMCTL VB6 или удалите zMSCOMCTL.res из проекта

  • Открыть ManifestCreatorv2.0.3:

  • Манифест> Создать из файла проекта (vbp) zMSCOMCTL.vbp

  • Манифест> Добавить / объединить манифест - из файла MSCOMCTL.ocx.manifest

  • Манифест> Манифест экспорта

    • [_] Манифест отступа
    • [_] Не использовать пространства имен с префиксом
    • [ x] Не экспортировать пустые / пустые атрибуты
    • Целевой файл ресурсов - сохранить в zMSCOMCTL.res (Заменить)

Д. Создайте новый zMSCOMCTL.exe

  • Откройте проект zMSCOMCTL VB6 или добавьте zMSCOMCTL.res обратно в проект
  • В проекте VB6 zMSCOMCTL начните с полной компиляции: выполняется ОК
  • В проекте zMSCOMCTL VB6, Файл -> Создать новый исполняемый файл:

Запуск нового исполняемого файла: zMSCOMCTL.exe Результат:

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

Это конец пробного метода FIRST (не удалось)

Re: VB6 RegFreeCom SideBySide SxS Manifest Test для TABCTL32.ocx

Успешный процесс:

Я скачал UMMM из https://github.com/wqweto/UMMM

[ Find_file ] [_ Clone_or_download_v] Click on the Green Button

Клонировать с HTTPS Используйте Git или оформляйте заказ с SVN, используя веб-URL.

[https://github.com/wqweto/UMMM.git]

[ Open_in_Desktop ] [ Download_ZIP ] Then Click on Download_ZIP Button

  • Я расширил загруженный файл UMMM-master.zip.
  • Получившаяся папка. \ Sr c содержала файлы: mdUmmm.bas и Ummm.vbp.
  • I скопировал их в свою собственную папку проекта UMMM-master
  • Я быстро взглянул на mdUmmm.bas и Ummm.vbp.
  • Ummm.vbp ссылается на SysWOW64.
  • В Блокноте поменял на System32. Development platform is WinXP(32)
  • Я открыл Ummm.vbp с помощью VB6
  • Я сделал File - Make для создания UMMM.exe
  • Я скопировал UMMM.exe в C: \ Программные файлы \ Support Tools \ in %path%

Это ссылки, которые я нашел для UMMM Unattended Make My Manifest:

  1. https://github.com/wqweto/UMMM
  2. Создание файлов манифеста для регистрации - бесплатно COM
  3. Без регистрации COM: VB6 Исполняемая ссылка на VB6 DLL
  4. https://github.com/wqweto/UMMM/blob/master/Sample.ini
  5. http://www.vbforums.com/showthread.php?840333-SXS-and-UMMM-with-inter-thread-marshalling
  6. https://github.com/wqweto/UMMM/issues/9
  7. https://github.com/wqweto/UMMM/issues/16

Первая ссылка - где У меня есть подсказки для создания файла .ini. Шестая ссылка помогла мне создать bat-файл, который вроде работает!

zMSCOMCTLUMMM.ini

Этот .ini-файл, следующий за строкой Identity, содержит список файлов зависимостей. Они перечислены в файле .vbp (например: Object = {831FDD16-0C5 C -11D2-A9F C -0000F8754DA1} # 2.2 # 0; mscomctl.ocx).

Вы также можете найти они перечислены в VB6 Menu> Project> Components ...

В этой форме Components вы можете выбрать [x] Selected Items Only, чтобы упростить просмотр списка.

Выделение каждого компонента в список будет отображаться ниже: (например: Местоположение C: \ ... \ MSCOMCTL.OCX)

В файле .ini я указываю путь к файлу зависимости, потому что он не хранится в локальная папка проекта.

Identity zMSCOMCTL.exe zMSCOMCTL.exe "MSCOMCTL Test program 1.0"  
File C:\WINDOWS\system32\mscomctl.ocx

zMSCOMCTLUMMM.bat

UMMM.exe zMSCOMCTLUMMM.ini .\manifest\zMSCOMCTL.exe.manifest

pause done?

Есть ли способ указать имя файла = в UMMM (автоматическое создание моего манифеста) при создании Program.exe.manifest?

Я отредактировал полученный zMSCOMCTL.exe.manifest с помощью Блокнота и изменил:

From: <file name="..\..\..\..\WINDOWS\system32\MSCOMCTL.ocx">
To: <file name="Dependencies\MSCOMCTL.ocx"> 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity name="zMSCOMCTL" processorArchitecture="X86" type="win32" version="1.1.0.24" />
    <description>MSCOMCTL Test program 1.0</description>
    <file name="Dependencies\MSCOMCTL.ocx">
        <typelib tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" version="2.2" flags="control,hasdiskimage" helpdir="" />
        <comClass clsid="{1EFB6596-857C-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.TabStrip.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
            <progid>MSComctlLib.TabStrip</progid>
        </comClass>
        <comClass clsid="{24B224E0-9545-4A2F-ABD5-86AA8A849385}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{9A948063-66C3-4F63-AB46-582EDAA35047}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{66833FE6-8583-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.Toolbar.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,simpleframe,setclientsitefirst">
            <progid>MSComctlLib.Toolbar</progid>
        </comClass>
        <comClass clsid="{7DC6F291-BF55-4E50-B619-EF672D9DCC58}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,simpleframe,setclientsitefirst" />
        <comClass clsid="{8B2ADD10-33B7-4506-9569-0A1E1DBBEBAE}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,simpleframe,setclientsitefirst" />
        <comClass clsid="{8E3867A3-8586-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.SBarCtrl.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,setclientsitefirst">
            <progid>MSComctlLib.SBarCtrl</progid>
        </comClass>
        <comClass clsid="{627C8B79-918A-4C5C-9E19-20F66BF30B86}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,setclientsitefirst" />
        <comClass clsid="{585AA280-ED8B-46B2-93AE-132ECFA1DAFC}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,setclientsitefirst" />
        <comClass clsid="{35053A22-8589-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.ProgCtrl.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,setclientsitefirst">
            <progid>MSComctlLib.ProgCtrl</progid>
        </comClass>
        <comClass clsid="{A0E7BF67-8D30-4620-8825-7111714C7CAB}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,actslikelabel,alignable,setclientsitefirst" />
        <comClass clsid="{C74190B6-8589-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.TreeCtrl.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
            <progid>MSComctlLib.TreeCtrl</progid>
        </comClass>
        <comClass clsid="{9181DC5F-E07D-418A-ACA6-8EEA1ECB8E9E}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{95F0B3BE-E8AC-4995-9DCA-419849E06410}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{DD2DBE12-F9F8-4E32-B087-DAD1DCEF0783}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{BDD1F04B-858B-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.ListViewCtrl.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
            <progid>MSComctlLib.ListViewCtrl</progid>
        </comClass>
        <comClass clsid="{996BF5E0-8044-4650-ADEB-0B013914E99C}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{979127D3-7D01-4FDE-AF65-A698091468AF}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{CCDB0DF2-FD1A-4856-80BC-32929D8359B7}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{2C247F23-8591-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.ImageListCtrl.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,invisibleatruntime,alignable,setclientsitefirst">
            <progid>MSComctlLib.ImageListCtrl</progid>
        </comClass>
        <comClass clsid="{F91CAF91-225B-43A7-BB9E-472F991FC402}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,invisibleatruntime,alignable,setclientsitefirst" />
        <comClass clsid="{556C2772-F1AD-4DE1-8456-BD6E8F66113B}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,invisibleatruntime,alignable,setclientsitefirst" />
        <comClass clsid="{F08DF954-8592-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.Slider.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
            <progid>MSComctlLib.Slider</progid>
        </comClass>
        <comClass clsid="{0B314611-2C19-4AB4-8513-A6EEA569D3C4}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
        <comClass clsid="{DD9DA666-8594-11D1-B16A-00C0F0283628}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" progid="MSComctlLib.ImageComboCtl.2" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst">
            <progid>MSComctlLib.ImageComboCtl</progid>
        </comClass>
        <comClass clsid="{87DACC48-F1C5-4AF3-84BA-A2A72C2AB959}" tlbid="{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,setclientsitefirst" />
    </file>
</assembly>

Затем используйте ManifestCreatorv2.0.3 для создания файла zMSCOMCTL.res

  • Манифест> Создать из файла проекта (vbp) zMSCOMCTL.vbp

  • Манифест> Добавить / объединить манифест - Из файла [например:. \ Manifest \ MSCOMCTL.exe.manifest]

  • Манифест> Манифест экспорта>

  • [_] Манифест отступа

    • [_] Не использовать пространства имен с префиксом
    • [x] Не экспортировать пустые / пустые атрибуты
    • Файл целевого ресурса - сохранить в zMSCOMCTL.res (Заменить)
  • Откройте проект zMSCOMCTL VB6 или добавьте zMSCOMCTL.res обратно в проект

Скомпилируйте, скомпилируйте и протестируйте программу.

  • В рамках проекта VB6 zMSCOMCTL, начните с полной компиляцией: выполняется ОК
  • В проекте VB6 zMSCOMCTL, Файл -> Создать новый исполняемый файл:
  • Сохранить проект
Running zMSCOMCTL.exe from with in its Project folder:
`[Run-Error 7 out of memory?]` 

Создайте и используйте файл NSIS для создания установочного файла SxS для тестирования на любых целевых компьютерах.

Файл NSIS создает исполняемую программу для:

- Determine if the target operating system is [AtLeastWinVista] and if it is [RunningX64].
- Request a selection from the available Harddrives / Partitions for installation.
- Based on this criteria, it creates an InstallDirectory and an InstallDirectory\Dependencies subdirectory.
- Copies the Program.exe into the InstallDirectory.
- Copies the Dependency files into the InstallDirectory\Dependencies subdirectory.
- Also based on this criteria it creates a Public read/write data directory.
- Creates desktop shortcut
- Creates start-menu items
- Creates an Uninstall mechanism

Я настроил файл NSIS для установки только файлов зависимостей, перечисленных в файле .vbp, файле UMMM.ini и в итоговом файле .exe.manifest.

Установлено на WinXP (32) работает нормально Установил на Win7 (64) работает нормально Установлен на Win10 (64) работает нормально

1 Ответ

0 голосов
/ 15 мая 2020

Вот запись из файла манифеста одного из поддерживаемых мною приложений VB6:

<assemblyIdentity name="name of application" processorArchitecture="X86" type="win32" version="a.b.c.d" />

...

<file name="tabctl32.ocx">
    <typelib tlbid="{BDC217C8-ED16-11CD-956C-0000C04E4C0A}" version="1.1" flags="control,hasdiskimage" helpdir="" />
    <comClass clsid="{BDC217C5-ED16-11CD-956C-0000C04E4C0A}" tlbid="{BDC217C8-ED16-11CD-956C-0000C04E4C0A}" progid="TabDlg.SSTab.1" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,simpleframe,setclientsitefirst">
        <progid>TabDlg.SSTab</progid>
    </comClass>
    <comClass clsid="{942085FD-8AEE-465F-ADD7-5E7AA28F8C14}" tlbid="{BDC217C8-ED16-11CD-956C-0000C04E4C0A}" threadingModel="Apartment" miscStatus="" miscStatusContent="recomposeonresize,cantlinkinside,insideout,activatewhenvisible,simpleframe,setclientsitefirst" />
</file>

сгенерировано из OCS версии 6.1.98.39 с использованием https://github.com/wqweto/UMMM с использованием строки файла конфигурации INI, например:

File tabctl32.ocx

Это несколько отличается от того, что в вопросе:

  • Имеет относительный путь к файлу

  • Другой список классов

  • Различные разные атрибуты

Hard чтобы без экспериментов сказать, насколько важными могут быть эти различия.

Я настоятельно рекомендую зарегистрировать вашу программу в Process Monitor и посмотреть, какие ошибки вы получите в журнале. Обычно так я выявляю сложные явные проблемы.

...