你如何打包Visual Studio c + +项目发布?

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

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

0
额外
意见: 2
只需使用安装向导,如Inno Setup。如果你需要的是打包一堆文件,Inno Setup特别容易使用。
额外 作者 sashoalm,

4 答案

  1. Choose Project -> Properties
  2. Select Configuration -> General
  3. In the box for how you should link MFC, choose to statically link it.
  4. Choose Linker -> Input. Under Additional Dependencies, add any libraries you need your app to statically link in.
0
额外
@BruceConnor。将库静态链接到可执行文件中。相反就是所谓的动态链接,它使得可执行文件在启动时查找 dll s(= dunamic链接库)。
额外 作者 danijar,
我可能会错过一些东西(我不是专家),但在执行完下面的步骤后,我仍然必须将所有 dll 包装在 exe 文件夹中。是不是OP打算将所有内容打包到 exe 文件中?
额外 作者 Malabarba,

你会看到静态链接(而不是动态链接)

我不确定有多少静态链接的MS可再发行组件。

0
额外

如果您正在查找哪个dll的目标机器丢失,请使用用于MSDev的depends.exe,但也可以找到此处。在一些目标机器上测试这个应该会告诉你你的应用需要打包哪些dll。

0
额外

请注意, Microsoft不建议您将运行时静态链接到您的项目,因为这可以防止它被Windows Update提供服务以修复重要的安全漏洞。如果您在主.exe和.dll文件之间传递内存,也会有潜在的问题,就好像每个静态链接运行时都会导致malloc / free不匹配问题。

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

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

0
额外