Installing applications using Microsoft runtime .dll's
- 1 Run time dependencies
- 2 Ways to distribute the dependencies
Run time dependencies
The examples here assumes you dependt on Microsoft.VC80.CRT version 8.0.50727.4053 but the situation is similar for other dependencies.
Windows caches the dependencies in C:\Windows\winsxs\ManifestCache, this is important to know when developing since once an exe has correctly located it's dependencies, it will continue to find them in the cache, until the exe is renamed, or moved to another folder. Therefor it is best to test your applications dependencies on a clean machine. This is easy under VmWare where you can continue to restore a snapshot.
Side By Side error
If you build an application that uses native .dll's that uses Microsoft Visual C++ runtime .dll's you need to install these runtime .dll's together with your application, or you will get errors like these:
In the event log, there is an Event 33, SideBySide error.
- Activation context generation failed for "C:\Release\NativeManifestTest.exe". Dependent Assembly Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053" could not be found. Please use sxstrace.exe for detailed diagnosis.
If you start the application from Microsoft Visual Studio, you can get the error:
- Error while trying to run project: Unable to start program 'C:\dev\mickey\NativeManifestTest\NativeManifestTest\bin\Release\NativeManifestTest.exe'.
- This application has failed to start because the application configuration is incorrect. Review the manifest file for possible errors. Reinstalling the application may fix this problem. For more details, please see the application event log.
WinSxs Tracing Utility
SxsTrace.exe is an application that traces why an executeable can't find it's dependencies.
Usage: SxsTrace [Options]
- Trace -logfile:FileName [-nostop]
- Enabling tracing for sxs.
- Tracing log is saved to FileName.
- If -nostop is specified, will not prompt to stop tracing.
- Parse -logfile:FileName -outfile:ParsedFile [-filter:AppName]
- Translate the raw trace file into a human readable format and save the result to ParsedFile.
- Use -filter option to filter the output.
- Stop the trace if it is not stopped before.
Example: SxsTrace Trace -logfile:SxsTrace.etl
- SxsTrace Parse -logfile:SxsTrace.etl -outfile:SxsTrace.txt
Assembly Searching Sequence
- Assembly Searching Sequence
- Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies *** - Microsoft
Ways to distribute the dependencies
Installing copy in local folder
Create a sub folder called Microsoft.VC80.CRT in same folder where the .exe filel is located. Place following 4 files in the Microsoft.VC80.CRT folder
The files can be downloaded here:
Embed manifest, and add merge module to installation of Managed (.NET) application
- Add the corrosponding merge module to your installer as prerequisite.
- Right click on the project, and selece Add - New item...
- Under General select Application Manifest File
- On the project's properties Application tab, under Resources, select Manifest: app.manifest' instead of Embed manifest with default settings.
- Add following this to app.manifest:
- <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Installing runtime modules using standalone installers
This has the drawback, that if done as prerequisite in installer, it will be uninstalled, when application is uninstalled. Other applications installed later also depending on the runtime modules will stop working when your application is uninstalled.