ClickOnce部署详解一:ClickOnce介绍及总体概览,最简单的ClickOnce安装程序

1,231 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

什么是ClickOnce

微软官方文档介绍如下:

ClickOnce 是一种部署技术,使用该技术可创建自行更新的基于 Windows 的应用程序,这些应用程序可以通过最低程度的用户交互来安装和运行。

ClickOnce 技术可以发布 Windows Presentation Foundation (.xbap) 、Windows 窗体 (.exe) 、控制台应用程序 (.exe) 或 Office 解决方案 (.dll) 等类型的程序集。 既可以在本地(脱机)运行,也可以需要联机模式下运行(这样不会在电脑上永久安装任何内容)。

ClickOnce 应用程序可以自行更新,程序可以检查是否有较新的版本,如果有会自动替换任何的更新文件。开发人员可以指定更新行为;网络管理员也可以控制更新策略,如将更新标记为强制性更新。此外,还可将更新回滚到早期版本。

ClickOnce 部署的优势

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

  • 更新应用程序的困难

使用 Microsoft Windows Installer 部署的应用程序,每次更新时,都必须重新安装整个程序;而 ClickOnce 部署,不仅可以自动提供更新,而且可以做到只有更改过的应用程序部分才会被下载,然后从新的并行文件夹重新安装完整的、更新后的应用程序。

  • 对用户的计算机的影响

使用 Windows Installer 部署时,应用程序通常依赖于共享组件,这就会有潜在的版本冲突问题;而使用 ClickOnce 部署时,每个应用程序都是独立的,不会干扰其他应用程序。

  • 安全权限

Windows Installer 部署要求管理员权限,并且只允许受限制的用户安装;而 ClickOnce 部署允许非管理用户安装应用程序,并可以仅授予应用程序所需要的那些代码访问安全权限。

ClickOnce 概要介绍

这部分对ClickOnce进行整体性的介绍,对于后面 ClickOnce 的使用、创建很有帮助,也需要相互来对照,才能理解本部分介绍的内容。

ClickOnce的安全

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

Certificates 证书

认证码证书(Authenticode certificates) 用于验证应用程序发布者的真实性。

通过 使用 认证码 进行应用程序部署,ClickOnce 可以防止恶意程序伪装成已经证实的、值得信赖的来源的合法程序。此外,还可使用证书对应用程序和部署清单进行签名,以证明文件未被篡改。

证书还可用于配置客户端计算机,使其拥有受信任的发布者的列表。如果某个应用程序来自受信任的发布者,则可在没有任何用户交互的情况下安装它。

Code access security 代码访问安全性

代码访问安全性可以限制代码对受保护资源的访问权限,可以选择 Internet 或本地 Intranet 区域来限制权限。

ProjectDesigner 属性中的“安全性”页面可以设置适合的应用程序安全性区域。

ClickOnce trust prompt 信任提示

当应用程序请求超过区域允许的权限时,系统会提示用户,并交由用户做是否允许的信任决定。

ClickOnce的部署

ClickOnce 部署架构的核心基于两个 XML 清单文件(manifest files):应用程序清单和部署清单。这两个文件用于描述 ClickOnce应用 从哪安装、如何更新,以及何时更新。

发布ClickOnce应用程序

应用程序清单描述了应用自身,包括程序集、依赖项和组成应用的文件、请求的权限 和 可用更新的位置。应用程序开发人员可以在 Visual Studio 的发布向导(适用于 .NET Core 和 .NET 5+ 的发布工具)或 Windows 软件开发工具包 (SDK) 中的清单生成和编辑工具 (Mage.exe) 来制作应用程序清单。

部署清单描述了应用程序如何部署,包括应用清单的位置、客户端应该运行的应用的版本。

.NET Core 3.1 和 .NET 5+ 应用部署 ClickOnce 使用的是 dotnetmage.exe。

.NET Framework 部署 ClickOnce 使用的则是 Mage.exe。

部署ClickOnce应用程序

ClickOnce 应用创建后,部署清单会复制到部署的位置,可以是Web服务器、网络文件共享,或CD一类的传统媒体设备。同时,应用程序清单和所有的应用程序文件会复制到部署清单指定的位置,这个位置可以是部署清单所在的部署位置,也可以是另外不同的位置。

在 VIsual Studio 中使用发布向导(Publish Wizard),会自动执行文件的复制操作。

安装ClickOnce应用程序

部署完成后,终端用户通过点击位于Web页面或文件夹中代表部署清单的图标icon实现下载和安装应用程序。

ClickOnce应用的安装,除了点击安装时会有弹窗询问是否确认安装,之后大多数情况下,都不需要任何介入操作就会安装完成。除了,要求权限提升(比如管理员),或者应用没有信任证书的签名,会再次询问用户是否授权和继续安装。

受信任证书是机器或企业级别的,因此,受信任证书签名的ClickOnce程序可以静默安装。

在不需要管理员权限的情况下,程序可以添加到用户的开始菜单和控制面板的添加/删除应用程序组中,即 Program Files文件夹 或 registry注册表 中

ClickOnce 安装是针对的每个用户,它会安装到每个用户中,并且使用应用程序缓存。

ClickOnce 应用程序是自包含、且相互隔离的(即使同一个程序的再次安装,也不会中断已有的程序)。ClickOnce 应用程序也可以从 Internet 或 Intranet 安全区域中直接运行

更新ClickOnce应用程序

当创建程序的更新版本时,会生成一个新的应用程序清单,并和程序文件一起复制到部署位置 —— 通常是原来的程序部署文件夹的隔壁文件夹。

管理员更新部署清单指向新版本应用程序的位置。

在 部署清单 中,除了部署位置之外,还包含一个更新位置,应用程序从此处检查版本更新。

ClickOnce 的 发布(Publish) 属性 可以指定应用程序检查更新的时间和频率。此外,发布(Publish)属性 可以指定当前更新是否为必需的更新,或者,回滚到一个早期版本。

更新的行为可以由部署清单指定,或者,通过 ClickOnce 的 API 在应用程序用户界面中呈现为用户选择的按钮或功能。

第三方安装

可以自定义 ClickOnce 安装程序,用于安装跟随应用程序一起的第三方组件。

必须有可再发行包(redistributable package - .exe 或 .msi 文件),并使用中性语言产品清单和特定语言包清单。

创建一个简单的ClickOnce安装程序

新建一个 Winform 项目 ClickOnceWinformFx,可以根据需要添加一些额外功能,或不添加。

在“解决方案资源管理器"中,右键 项目节点 选择【属性】。

在项目属性中,打开“发布”页,根据需要:

  • 设置发布的位置,此处保持默认,发布到项目的publish\文件夹中。

  • 安装模式,默认,选择“该应用程序也可以脱机使用”。即安装后可以从本地运行打开,比如开始菜单、桌面快捷方式等。

  • 发布版本,指定个版本号。

然后,点击“立即发布”。【如果有问题,最好“重新生成”一次项目,再发布】

如下,发布成功:

项目的发布文件夹位置publish\中,可以看到生成的安装包。

点击安装包安装

安装完成后,会打开程序运行。

开始菜单、控制面板的“程序和功能”中也能看到新安装的应用程序:

注:发布后的整个文件夹中的内容,需要都复制到目标计算机中,才能执行安装

setup.exe 安装时需要用到其他 即 程序文件。

参考