2008-08-06 243 views
31

我想知道如何制作一个发布版本,其中包含所有必要的dll文件到.exe中,以便程序可以在非开发机器上运行,而无需在目标机器上安装微软的可再发行组件。如何打包Visual Studio C++项目以进行发布?

如果不这样做,您会收到错误消息,指出应用程序配置不正确并重新安装。

+0

只需使用安装向导,如Inno Setup。如果你需要的是打包一堆文件,Inno Setup特别容易使用。 – sashoalm 2015-02-16 10:34:07

回答

17
  1. 选择项目 - >属性
  2. 选择配置 - >常规
  3. 在框中您应如何链接MFC,选择静态链接它。
  4. 选择链接器 - >输入。在附加依赖​​,添加您需要的应​​用程序静态链接任何库。
+3

我可能会错过一些东西(我不是专家),但在执行完下面的步骤后,我仍然需要将所有* dll *包装在* exe *文件夹中。不是OP有意将所有东西打包到* exe *文件中吗? – Malabarba 2011-09-07 04:09:01

0

你会寻找到静态链接(而非动态链接)

我不知道有多少MS的静态再分发中链接。

0

如果您想了解哪些dll的目标机器丢失,然后使用过去与MSDev一起使用的depends.exe,但也可以找到here。在一些目标机器上测试这个应该会告诉你你的应用需要打包哪些dll。

10

您需要设置运行时库(在C/C++ - >代码生成)的所有项目,静态链接,这关联到以下默认建筑配置:

  • 多线程调试/发布
  • 单线程调试/发行版

与这些库的“DLL”版本相反。

即使你这样做,根据你使用的库,你可能需要安装一个合并模块/框架/等。这取决于您的依赖关系的静态LIB版本是否可用。

4

注意Microsoft do not recommend that you static link the runtime into your project,因为这阻止它通过Windows更新获得服务而修复严重安全漏洞。如果您在主.exe和.dll文件之间传递内存,也会有潜在的问题,就好像每个静态链接运行时都会导致malloc/free不匹配问题。

您可以将DLL包含在可执行文件中,无需将它们编译到.exe中,也不需要运行重新启动工具 - 这就是我所做的,它似乎可以正常工作。

美中不足的是,如果您要分发多种Windows版本,则需要将文件包含两次 - 较新的操作系统需要清单定义的目录中的文件,而较旧的操作系统需要所有文件在程序目录中。

相关问题