ClickOnce 部署和安全性

ClickOnce 是一种部署技术,可用于创建可安装和运行且用户交互最少的基于 Windows 的自更新应用程序。 如果已使用 Visual Basic 和 Visual C# 开发项目,Visual Studio 将完全支持发布和更新使用 ClickOnce 技术部署的应用程序。 若要了解如何部署 Visual C++ 应用程序,请参阅 Visual C++ 应用程序的 ClickOnce 部署

ClickOnce 部署克服了部署中的三个主要问题:

  • 更新应用程序时遇到困难。 通过Microsoft Windows Installer 部署,每当更新应用程序时,用户都可以安装更新、msp 文件并将其应用于已安装的产品;借助 ClickOnce 部署,可以自动提供更新。 仅下载已更改的应用程序部分,然后从新的并排文件夹重新安装完整更新的应用程序。

  • 对用户计算机的影响。 使用 Windows Installer 部署时,应用程序通常依赖于共享组件,并有可能发生版本控制冲突;对于 ClickOnce 部署,每个应用程序都是自包含的,不能干扰其他应用程序。

  • 安全权限。 Windows Installer 部署需要管理权限,只允许有限的用户安装;ClickOnce 部署使非管理用户能够仅安装和授予应用程序所需的代码访问安全权限。

    过去,这些问题有时导致开发人员决定创建 Web 应用程序而不是基于 Windows 的应用程序,从而牺牲丰富的用户界面,以便于安装。 通过使用 ClickOnce 部署的应用程序,你可以充分利用这两种技术。

什么是 ClickOnce 应用程序?

ClickOnce 应用程序是任何使用 ClickOnce 技术发布的 Windows Presentation Foundation(.xbap)、Windows 窗体(.exe)、控制台应用程序(.exe)或 Office 解决方案(.dll)。 可以通过三种不同的方式发布 ClickOnce 应用程序:从网页、网络文件共享或旧媒体(如 CD-ROM)发布。 ClickOnce 应用程序可以安装在最终用户的计算机上,即使计算机处于脱机状态,也可以在本地运行,也可以在仅联机模式下运行,而无需在最终用户的计算机上永久安装任何内容。 有关详细信息,请参阅 选择 ClickOnce 部署策略

ClickOnce 应用程序可以自我更新。它们可以检查是否有可用的新版本,并自动替换更新的文件。 开发人员可以指定更新行为;网络管理员还可以控制更新策略,例如,将更新标记为必需。 最终用户或管理员也可以将更新回滚到早期版本。 有关详细信息,请参阅选择 ClickOnce 更新策略

由于 ClickOnce 应用程序是隔离的,因此安装或运行 ClickOnce 应用程序不能破坏现有应用程序。 ClickOnce 应用程序是独立的;每个 ClickOnce 应用程序都安装到安全的每用户、每应用程序缓存中并从这里运行。 ClickOnce 应用程序在 Internet 或 Intranet 安全区域中运行。 如有必要,应用程序可以请求提升的安全权限。 有关详细信息,请参阅保护 ClickOnce 应用程序

ClickOnce 安全性的工作原理

核心 ClickOnce 安全性基于证书、代码访问安全策略和 ClickOnce 信任提示。

证书

验证码证书用于验证应用程序的发布者的真实性。 通过对应用程序部署使用 Authenticode,ClickOnce 有助于防止有害程序将自己描绘成来自已建立的可信源的合法程序。 (可选)证书还可用于对应用程序和部署清单进行签名,以证明文件未被篡改。 有关详细信息,请参阅 ClickOnce 和 Authenticode。 证书还可用于将客户端计算机配置为具有受信任的发布者列表。 如果应用程序来自受信任的发布者,则无需任何用户交互即可安装该应用程序。 有关详细信息,请参阅 受信任的应用程序部署概述

代码访问安全性

代码访问安全性有助于限制代码对受保护资源的访问权限。 在大多数情况下,可以选择 Internet 或本地 Intranet 区域来限制权限。 使用 项目设计器 中的 安全 页请求适合应用程序的区域。 还可以调试具有受限权限的应用程序来模拟最终用户体验。 有关详细信息,请参阅 ClickOnce 应用程序的代码访问安全性

注意

在 ClickOnce for .NET Core 和 .NET 5 或更高版本中,此功能不受支持。 有关详细信息,请参阅 ClickOnce for .NET

ClickOnce 信任提示

如果应用程序请求的权限超过区域允许的权限,可以提示最终用户做出信任决策。 最终用户可以确定 ClickOnce 应用程序(如 Windows 窗体应用程序、Windows Presentation Foundation 应用程序、控制台应用程序、XAML 浏览器应用程序和 Office 解决方案)是否受信任才能运行。 有关详细信息,请参阅 如何:配置 ClickOnce 信任提示行为

ClickOnce 部署的工作原理

核心 ClickOnce 部署体系结构基于两个 XML 清单文件:应用程序清单和部署清单。 这些文件用于描述 ClickOnce 应用程序的安装位置、更新方式以及更新时间。

发布 ClickOnce 应用程序

应用程序清单描述应用程序本身。 这包括程序集、构成应用程序的依赖项和文件、所需的权限和可用更新的位置。 应用程序开发人员通过使用 Visual Studio 中的发布向导(适用于 .NET Core 和 .NET 5+ 的发布工具)或 Windows 软件开发工具包(SDK)中的清单生成和编辑工具(Mage.exe)编写应用程序清单。 有关详细信息,请参阅:

部署清单描述应用程序的部署方式。 这包括应用程序清单的位置,以及客户端应运行的应用程序的版本。

说明

在 ClickOnce for .NET Core 3.1 和 .NET 5 或更高版本中,使用 dotnet-mage.exe 而不是 Mage.exe。 有关详细信息,请参阅 ClickOnce for .NET

部署 ClickOnce 应用程序

创建后,部署清单将复制到部署位置。 可以是 Web 服务器、网络文件共享或旧媒体,例如 CD。 应用程序清单和所有应用程序文件也会复制到部署清单中指定的部署位置。 这可以与部署位置相同,也可以是不同的位置。 在 Visual Studio 中使用 发布向导 时,会自动执行复制操作。

安装 ClickOnce 应用程序

部署到部署位置后,最终用户可以通过单击表示网页或文件夹中部署清单文件的图标来下载和安装应用程序。 在大多数情况下,最终用户会显示一个简单的对话框,要求用户确认安装,之后安装继续进行,应用程序会启动,无需进行额外的干预。 如果应用程序需要提升的权限,或者如果应用程序未由受信任的证书签名,则对话框还会要求用户授予权限,然后才能继续安装。 尽管 ClickOnce 安装是按用户安装的,但如果存在需要管理员权限的先决条件,则可能需要权限提升。 有关提升权限的详细信息,请参阅 保护 ClickOnce 应用程序

证书可以在计算机或企业级别上被信任,以便使用受信任证书签名的 ClickOnce 应用程序可以无提示地安装。 有关受信任的证书的详细信息,请参阅 受信任的应用程序部署概述

应用程序可以添加到用户的 “开始” 菜单和 “添加或删除程序” 组中 控制面板。 与其他部署技术不同,Program Files 文件夹或注册表中未添加任何内容,安装不需要任何管理权限

说明

还可以阻止应用程序添加到 “开始”菜单“添加与删除程序”组,这实际上使它的运作方式类似于网络应用程序。 有关详细信息,请参阅 选择 ClickOnce 部署策略

更新 ClickOnce 应用程序

应用程序开发人员创建应用程序的更新版本时,会生成新的应用程序清单并将文件复制到部署位置,通常是原始应用程序部署文件夹的同级文件夹。 管理员将部署清单更新为指向新版本应用程序的位置。

备注

Visual Studio 中的 发布向导 可用于执行这些步骤。 对于 .NET Core 和 .NET 5+,发布工具提供这些步骤。

除了部署位置,部署清单还包含更新位置(网页或网络文件共享),应用程序会检查更新的版本。 ClickOnce 的 Publish 属性用于指定应用程序检查更新的时间和频率。 可以在部署清单中指定更新行为,也可以通过 ClickOnce API 在应用程序的用户界面中将其显示为用户选择。 此外,可以使用 发布 属性来强制更新或回滚到早期版本。 有关详细信息,请参阅选择 ClickOnce 更新策略

第三方安装程序

可以自定义 ClickOnce 安装程序以安装第三方组件以及应用程序。 必须拥有可再发行包(.exe 或 .msi 文件),并使用中性语言产品清单和特定语言包清单来描述该包。 有关详细信息,请参阅 创建引导程序包

ClickOnce 工具

下表显示了可用于生成、编辑、签名和重新对应用程序和部署清单重新签名的工具。 对于 .NET Core 和 .NET 5+,使用发布配置文件设置类似于 MSBuild 属性的选项。

工具 描述
“项目设计器”->“安全”页 对应用程序和部署清单进行签名。 对于 .NET Core 和 .NET 5+,这些设置位于发布配置文件中。
“项目设计器”->“发布”页 为 Visual Basic 和 Visual C# 应用程序生成和编辑应用程序和部署清单。 对于 .NET Core 和 .NET 5+,这些设置位于发布配置文件中。
Mage.exe(清单生成和编辑工具) 为 Visual Basic、Visual C# 和 Visual C++ 应用程序生成应用程序和部署清单。

对应用程序和部署清单进行签名并重新签名。

可以从批处理脚本和命令提示符运行。
dotnetmage.exe(清单生成和编辑工具) 为 .NET 5+ C# 和 Visual Basic 应用程序生成应用程序和部署清单。 用法等效于 Mage.exe

对应用程序和部署清单进行签名并重新签名。

可以从批处理脚本和命令提示符运行。
MageUI.exe(清单生成和编辑工具、图形客户端) 生成和编辑应用程序和部署清单。

对应用程序和部署清单进行签名并重新签名。
GenerateApplicationManifest 任务 生成应用程序清单。

可以从 MSBuild 运行。 有关详细信息,请参阅 MSBuild 参考
GenerateDeploymentManifest 任务 生成部署清单。

可以从 MSBuild 运行。 有关详细信息,请参阅 MSBuild 参考
SignFile 任务 对应用程序和部署清单进行签名。

可以从 MSBuild 运行。 有关详细信息,请参阅 MSBuild 参考
Microsoft.Build.Tasks.Deployment.ManifestUtilities 开发自己的应用程序以生成应用程序和部署清单。

下表显示了在这些浏览器中支持 ClickOnce 应用程序所需的 .NET Framework 版本。

浏览器 .NET Framework 版本
Firefox 2.0 SP1、3.5 SP1、4
3.5
Microsoft Edge 3.5