I’ve developed a 64 bit dll using C++ and Visual Studio 2008 and i’m trying to register it on a target machine using ‘regsvr32.exe’. I’ve checked the manifest file and it clearly states what version of CRT is needed:
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />
When i try to register the file i always get a side-by-side error message stating that the application settings are incorrect and that i should reinstall it.
Log Error: Generate Activation Context
failed… Reference error message: The
referenced assembly is not installed
on your system.
The target machine runs Windows Xp Professional 64 bit. I’ve tried to install the corresponding VC++ redistributable package( VC++ 2008 Redist x86 and x64 ), create a setup and include the corresponding merge module ( microsoft_vc90_crt_x86_x64.msm ), install all VC++ redistributable packages etc. No matter what’s installed it will always fail.
If i check for the dependent files and they are correctly located inside the WinSxS folder, but if i run Dependency Walker on the file it will complain too that the files from the VC9 CRT could not be found.
If i build the file for 32 bit it will correctly register on a 32 bit OS. I’m running out of ideas so any help is very appreciated.
Thanks,
Adrian.
EDIT *This is reproductible only on Win XP 64, all works fine on Windows 7 64 bit.
In the end I’ve managed to fix this by including a newer version of C++ redistributable merge modules into the setup along with all the required policy merge modules in order to redirect the calls to any old version to the new one that’s available.
Most important thing here is that the exe redistributable include the policy files and the merge modules don’t so they need to be separately added.