Как мне создать файл манифеста для указания моего исполняемого файла / плагина на мою конкретную версию Qt.dll? - PullRequest
4 голосов
/ 10 июня 2011

У меня возникают проблемы с пониманием того, как работают манифесты / для чего они предназначены.

Моя ситуация такова: мне нужно развернуть свой собственный автономный .exe-файл, который реализует Qt, а также плагин (.8bf, плагин photoshop, скрытый .dll), который реализует Qt.

У меня есть собственные библиотеки Qt DLL, которые я скомпилировал с пользовательским пространством имен и именем инфикса, которые я хочу установить в C: \ Program Files \ MyCompany \ Qt

Могу ли я использовать манифесты дляу меня есть .exe и плагин 'point' в этих библиотеках Qt?И exe, и плагин находятся в разных подкаталогах C: \ Program Files \ MyCompany, а ссылка на плагин оболочки установлена ​​в директории photoshop \ plug-ins.

Проявляет то, что я ищуи если да, какие шаги необходимы для достижения этой цели?Похоже, что DLL-библиотекам Qt понадобятся некоторые манифесты для идентификации / регистрации, но после того, как я побывал в круговой погоне за ссылками msdn, я решил спросить здесь (разумеется, после поиска и поиска только частично связанных вопросов).

1 Ответ

4 голосов
/ 16 июня 2011

Звучит так, как будто ваша сборка доступна для кэша сборок, и она решит вашу проблему - и это проблема, для которой GAC был разработан, но это излишне.

Просто отправьте ту же версию этих DLL вобе директории.


Манифесты используются для того, чтобы ваша программа использовала определенную версию DLL (или набор DLL).

Лучший известный пример - когда ваше приложение пытаетсязагрузить comctl32.dll.

Эта DLL обычно находится в вашей system32 :

 Directory of C:\Windows\System32

11/20/2010  09:25 ᴀᴍ           633,856 comctl32.dll
               1 File(s)        633,856 bytes

И если вы не сделали ничего особенного, вы получите эту версию DLL(версия 5.82).Но для программ характерно, что не хочет эту версию comctl32.Большинство программ, написанных для Windows XP или новее, хотят быть уверены, что они загружают версию 6 из comctl32.Они делают это, указывая запись в манифесте сборки своего исполняемого файла, говоря, что они хотят конкретную версию библиотеки общих элементов управления:

<dependency>
   <dependentAssembly>
      <assemblyIdentity 
               type="win32" 
               name="Microsoft.Windows.Common-Controls" 
               version="6.0.0.0" 
               processorArchitecture="X86" 
               publicKeyToken="6595b64144ccf1df" 
               language="*">
      </assemblyIdentity>
   </dependentAssembly>
</dependency>

Теперь, если приложение пытается загрузить comctl32.dll,даже если в пути поиска уже есть версия (или даже в той же папке), Windows вместо выдаст Версия 6 из comctl32.dll.Эта dll спрятана в специальном месте, где люди не должны трогать:

 Directory of C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc

07/13/2009  09:03 ᴩᴍ         1,680,896 comctl32.dll
               1 File(s)      1,680,896 bytes

Бонус болтовни : причина WinSxS настолько велика, потому что она содержиткаждая версия каждого DLL, что кто-то может хотеть.Я насчитал 3619 собраний.Причина, по которой вы не хотите удалять WinSxS, состоит в том, что программе нужна одна из этих библиотек.

Похоже, что вам нужно создать манифест сборки для Qt (которыйопределяет серию связанных dll), а затем регистрирует эту сборку в параллельной системе Windows.

К сожалению, кажется, что для размещения в WinSxS сборкафайлы должны иметь цифровую подпись.Он также выглядит так, как будто только с помощью установщика Windows можно устанавливать сборки, устанавливая их в кэш Side-by-Side:

. Вы должны устанавливать общие параллельные сборки как компонентыпакет установщика Windows.Это может быть тот же установочный пакет, который используется для установки или обновления вашего приложения.Если общая сборка поставляется в составе нескольких приложений, необходимо предоставить модуль слияния, который можно включить в установочные пакеты этих приложений, и создать каталог для файлов в сборке.

Установщик Windows версии 2.0 илипозже потребуется установить сборки.Для получения дополнительной информации см. Windows Installer SDK и разделы под Установка сборок Win32 .

См. Также

...