Visual C++
部署 (C++)

部署是分发要安装到其他计算机上的已完成应用程序或组件的过程。部署是一个多阶段过程,该过程从在开发人员的计算机上创建应用程序开始,到应用程序安装后并准备在用户的计算机上运行结束。

Visual Studio 为部署 Windows 应用程序提供两种不同的技术:ClickOnce 部署或 Windows Installer 部署。

  • ClickOnce 可用于部署针对公共语言运行库(混合程序集、纯程序集和可验证程序集)的 C++ 应用程序。虽然也可使用 Windows Installer 来部署托管应用程序,但是 ClickOnce 可利用 .NET Framework 安全功能(例如清单签名),因此在 Windows Installer 部署中首选使用后者。ClickOnce 不支持部署本机 C++ 应用程序。有关更多信息,请参见Visual C++ 应用程序的 ClickOnce 部署

  • Windows Installer 技术可用于部署针对公共语言运行库的本机 C++ 应用程序和 C++ 应用程序。

有关 ClickOnce 和 Windows Installer 部署的详细比较,请参见 选择部署策略

本节讨论如何确保本机 Visual C++ 应用程序可以在提供受支持目标平台的任何计算机上运行,您的安装包内需要包括哪些文件以及建议您使用哪些方式重新发布应用程序依赖的 Visual C++ 组件。

如果您对部署过程已经相当熟悉,且主要想了解 Visual Studio 2005 中的变化情况,则可从选择部署方法开始学起。有关部署示例,请参见部署示例

下列主题更详细地讨论 Visual C++ 应用程序的部署。

本节内容

请参见

标记 :


Community Content

Stella01
分发您的应用程序

(此帖是由 US MSDN Wiki 中 Ben Anderson MSFT 的英文帖子翻译为简体中文)

大多数情况下,最好的部署方法是使用 setup .msi 中包含的合并模块来分发 Visual C++ 库。这是最安全的方法,使 Windows Side-by-Side 可以管理安全更新和库的版本规则。它的另一个优点是您不需要像使用 vcredist*.exe 时那样将两个单独的条目安装到“添加/删除程序”中。在该情形下,客户可直接从“添加/删除程序”中删除 vcredist 条目,从而破坏您的应用程序,因为它看上去不是您的应用程序的一部分。另外,它允许 Windows SxS 管理共享使用方案;否则,您何时知道是否在卸载时删除库?您永远不会知道其他应用程序是否正在使用 vcredist 来进行部署,因此,如果您在卸载时尝试删除它,则将破坏该用户的其他应用程序。Windows SxS 部署可以为您管理引用计数 – 假设您使用 MSI 中的合并模块执行安装。

使用 VS 创建安装程序很简单:

1) 创建新的安装项目

2) 添加要部署的文件

3) 在许多情况下,可以检测到 VC 库依赖项并添加正确的合并模块。如果没有,只需右击该项目,然后单击“添加”->“合并模块”,然后为要部署的库和结构选择合并模块。

4) 按“生成”。现在,您的安装程序会将执行时所需的 VC 库安装到 WinSXS 中,WinSXS 将替您管理它们。

标记 :

Stella01
警告 – 这只适用于 Windows Installer 3 及更高版本

(此帖是由 US MSDN Wiki 中 jorendorff 的英文帖子翻译为简体中文)

上面 Ben Anderson 介绍的方法确实是值得推荐的方法,不过,如果您选择此方法,您的 MSI 将不能在 Windows Installer 3.0 之前的版本上运行!这表示您无法在没有打补丁的 Windows 2000 和 Windows 2003 Server 系统上执行安装。错误是:“此 Windows Installer 程序包出错。完成此安装所需的 DLL 无法运行。请与您的支持人员或程序包供应商联系。”(在 msiexec 日志中,您将看到“错误 1723。此 Windows Installer 程序包出错。完成此安装所需的 DLL 无法运行。请与您的支持人员或程序包供应商联系。操作 SxsInstallCA,条目:CustomAction_SxsMsmInstall,库:C:\WINDOWS\Installer\MSIA.tmp”。)

解决方法:安装 Windows Installer 3 或更高版本,然后再安装 MSI。这很痛苦,不过,在大多数情况下,这是各种笨办法中最好的一个。

标记 :

Stella01
尝试 SP1 redist

(此帖是由 US MSDN Wiki 中 Ben Anderson MSFT 的英文帖子翻译为简体中文)

我认为 jorendorff 提到的问题已经在 VS2005 的 SP1 发行版中得到了解决。如果我说错了,请大家纠正我。

标记 :

Page view tracker