为最终客户交付c++应用程序

deliver c++ application for the final customer

本文关键字:c++ 应用程序 交付 客户      更新时间:2023-10-16

我正在visualstudio2010上开发一个c++windows应用程序。

我想把我的应用程序交付给我的客户,这样他就可以安全地使用它,而无需安装visualruntimefx。并在任何地方执行。

如何设置安装程序,使客户不需要单独安装任何所需的Visual Studio运行库?

请给我一个解决这个问题的方案,因为我的客户离计算太远了,他们喜欢"下一个,下一个安装,完成"系统。

谢谢你的帮助。

您可以静态链接产品,使其不具有任何外部依赖项,也可以在构建安装程序时为所需的运行时组件包含MSI合并模块。

一般来说,您有两个选项:

  • 构建安装程序(例如,使用WiX或NSIS)。安装程序将安装您的应用程序以及任何所需的库。由于您正在分发应用程序,因此很可能您已经在构建安装程序,因此此解决方案是有意义的。

  • 将文件与任何必需的库静态链接。这样,您的应用程序可执行文件就包含了所需的所有代码。当然,这是假设您正在使用的库可以静态链接。事实可能并非如此。

请不要静态链接任何内容。如果您正在生产MSI安装程序,只需按照此处和此处的说明为Visual Studio运行时包含合并模块即可。如果你可以使用WiX的最新版本,你可能想创建一个捆绑包。

通常情况下,选项包括静态链接、私有部署、使用合并模块来重用其他人的逻辑或通过使用引导程序重新分发prereq。

如果不知道你的确切依赖关系是什么,就不可能给出确切的答案,但以下是每种依赖关系的利弊:

静态链接-简单,因为除了你的文件之外没有什么可部署的。主要的缺点是,如果库存在安全漏洞,需要进行修补,则必须重新构建和重新部署应用程序。

私有部署-相对简单,因为您只需在应用程序目录中部署文件。仍然存在服务问题,因为您必须重新构建和重新部署应用程序。Microsoft不会修补您的目录。

合并模块-看起来很简单,只需添加合并模块即可。不过,仍然存在一些主要问题,如果合并模块出现问题,则由供应商决定。(微软)。这就是为什么现在不赞成使用合并模块的原因。

redist-最难实现(您需要定义setup.exe引导程序),但也最容易重用别人的安装程序。这是最佳的,因为供应商可以在不重建您的dll的情况下修补该dll。

因此,一般来说,重新分配是可行的。但并不总是…:)