我正在做一个非常小的Windows应用程序,只包含一个可执行文件。由于程序将驻留在SD卡上,我希望应用程序尽可能自包含,而我宁愿没有安装程序。我希望用户能够简单地将可执行文件复制到SD卡,并能够直接运行它,而无需摆弄任何额外的东西。然后问题就变成了我的程序是用VS 2008编译的,这需要我不能保证安装的CRT版本。我正在静态链接到CRT,我错误地认为这会绕过这个问题。我一直在考虑追踪一些旧的VS版本,但我觉得这是不正确的路径。我希望程序在全新安装的windows xp及更高版本上运行。
感谢任何帮助。
答案 0 :(得分:3)
使用/MT
或/MTd
(用于调试)静态链接到CRT应该完全符合您的需要。
事实上,它并不表示仍然存在依赖于动态库的东西。如果你有一些额外的DLL没有用静态CRT编译,那就是这种情况。
您可以使用dependency walker (depends.exe)确切地确定哪些dll使用哪个,哪些仍依赖于动态CRT或任何其他DLL。
另一种方法是从调试器运行exe并查看输出窗口中正在加载哪些DLL。哪个depends.exe只为你提供了启动时加载的dll,这可以为你提供一些仅在运行时加载的附加依赖项。
答案 1 :(得分:1)
如果您想要链接CRT库的DLL版本并且您想避免安装任何内容,则需要将CRT程序集的每个成员复制到与可执行文件相同的文件夹中。它可能不是微软推动你的方式,但它是有效的,它确实有效。
在Visual Studio 2008安装目录中,您应找到一个文件夹:VC\redist\x86\Microsoft.VC90.CRT
。如果将该文件夹的完整内容(包括清单文件)复制到与可执行文件相同的目录中,那么您应该能够从该位置运行可执行文件。