开启掘金成长之旅!这是我参与「掘金日新计划 · 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
安装时需要用到其他 即 程序文件。