How to create a manifest file to point my executable / plugin to my specific version of Qt.dll?

I had problems understanding how the work manifests itself / what it is for.

My situation is this: I need to deploy my own standalone .exe that implements Qt, as well as a plugin (.8bf, photoshop plugin, .dll) that implements Qt.

I have my own Qt DLL that I compiled with a custom namespace and infix name that I want to install in C: \ Program Files \ MyCompany \ Qt

Can I use manifests to have both my .exe and the 'point' plugin in these Qt dlls? Both exe and the plugin are located in different sections of C: \ Program Files \ MyCompany, and the link to the plugin in the plugin is installed in the photoshop \ plug-ins directory.

Am I manifesting what I am looking for, and if so, what steps are needed to do this? It seems that the Qt DLL needs some manifests to identify / register itself, but after you continued the circular pursuit of msdn channels, I decided to ask here (after searching and searching for only partially related questions).

+4
source share
1 answer

It looks like the build available for the build cache will solve your problem - and this is the problem that the GAC designed to solve, but it is full.

Just send the same version of this DLL to both directories.


Manifests are used to ensure that your program uses a specific version of the DLL (or set of DLLs).

The most famous example is when your application tries to download comctl32.dll .

This dll is usually located on your system32 :

  Directory of C:\Windows\System32 11/20/2010 09:25 ᴀᴍ 633,856 comctl32.dll 1 File(s) 633,856 bytes 

And if you didn’t do anything, you will get this dll version (version 5.82). But usually this version of comctl32 not required for programs. Most programs written for Windows XP or later must be sure that they download version 6 from comctl32 . They do this by specifying an entry in the manifest of their executable assembly, stating that they need a specific version of the library of common controls:

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

Now, if the application is trying to download comctl32.dll , although the version is already in the search path (or even in the same folder), Windows will instead offer Version 6 of comctl32.dll . This dll is hidden in a special place where people should not touch:

  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 

Bonus chatter . The reason WinSxS so great is because it contains every version of every DLL that someone might want. I count 3619 meetings. The reason you do not want to remove WinSxS is because the program requires one of these DLLs.

It looks like the solution you want is to create an Assembly manifest for Qt (which defines a series of related DLLs), and then register this assembly using the Windows system nearby.

Unfortunately, it seems that for deployment in WinSxS, assembly files must be digitally signed. It seems that only through the Windows installer can you build the assemblies installed in the Side-by-Side cache:

You must install common build side by side as components of a Windows Installer package. This may be the same installation package that is used to install or update your application. If the general assembly comes as part of several applications, you must provide a merge module that can be included in the installation packages of these applications and create a directory for the files in the assembly.

Installing assemblies requires Windows Installer 2.0 or later. For more information, see the Windows Installer SDK and sections under Installing Win32 Builds .

see also

+4
source

All Articles