我的程序依赖于Microsoft重新分发程序包,或者更具体,取决于MSVCR100.dll
推荐的方法是在程序运行之前安装redistribute包。但是,我的程序非常小(大约1MB),vcredist.exe大约是5MB,对我的安装程序来说有点太大了。
所以这是另一种方式,根据Microsoft的许可,我们可以将dll安装到我的应用程序文件夹中的子文件夹(\VC\redist\x86\Microsoft.VC100.CRT\
)中。所以我的应用程序目录就像:
MyAppFolder\a.exe
MyAppFolder\lib\a.dll
MyAppFolder\VC\redist\x86\Microsoft.VC100.CRT\MSVCR100.dll
我的问题是,如何让a.dll找到位于另一个文件夹中的MSVCR100.dll?
答案 0 :(得分:0)
您可以考虑将CRT链接为静态库,不会对MSVCRxxx.dll产生依赖,
但你的EXE / DLL会更大。
http://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.100%29.aspx
http://msdn.microsoft.com/en-us/library/aa984514.aspx
如果您的项目包含一个EXE / DLL,此解决方案是合适的,但对于更大的项目,您可以在其中创建带有MSVCRT合并模块的MSI包。
答案 1 :(得分:0)
刚刚找到一个可以解决我问题的函数 - AddDllDirectory。
是的,我可以将CRT链接为静态库,但在我的情况下,有几个依赖它的库,这意味着每个dll都有一个MSVCR100.dll副本。