我想知道如何在.exe中创建包含所有必需的dll文件的发布版本,这样程序就可以在非开发机器上运行,而无需在目标机器上安装microsoft可再发行组件。
如果不这样做,您将收到应用程序配置不正确并重新安装的错误消息。
答案 0 :(得分:17)
答案 1 :(得分:10)
您需要将所有项目的运行时库(在C / C ++ - >代码生成下)设置为静态链接,这与以下默认构建配置相关:
与这些库的“DLL”版本相反。
即使您这样做,根据您使用的库,您可能必须安装合并模块/框架/等。这取决于您的依赖项的静态LIB版本是否可用。
答案 2 :(得分:4)
请注意Microsoft do not recommend that you static link the runtime into your project,因为这可以防止Windows更新服务以修复重要的安全漏洞。如果你在主.exe和.dll文件之间传递内存,也有潜在的问题,就好像这些静态链接中的每一个都会导致运行时最终出现malloc / free mismatch问题。
您可以将DLL与可执行文件一起包含,而不将它们编译到.exe中而不运行redist工具 - 这就是我所做的,它似乎工作正常。
美中不足的唯一问题是,如果您要分发各种Windows版本,则需要包含两次文件 - 较新的操作系统需要清单定义目录中的文件,较旧的操作系统需要所有文件程序目录。
答案 3 :(得分:0)
您正在寻找静态链接(而不是动态链接)
我不确定有多少MS可再发行组件静态链接。
答案 4 :(得分:0)
如果您想找出目标机器缺少哪个dll,请使用以前用于MSDev的depends.exe,但也可以找到here。在几台目标机器上进行测试应该告诉您需要将哪些dll打包到您的应用程序中。
答案 5 :(得分:0)
您应该使用静态链接,并在其他依赖项下添加所需的所有库。