【译】ClickOnce部署概述
ClickOnce是一项部署技术,它能够让你创建基于Windows操作系统并能自动更新的应用程序,同时在安装过程中,可以将用户需要进行的交互降到最低。ClickOnce部署克服了在部署过程中存在的以下三个主要问题:
- 更新应用程序带来的复杂性。使用Microsoft Windows Installer进行部署,应用程序无论何时需要更新,用户都必须重新安装整个应用程序;如果使用ClickOnce进行部署,那么你就可以提供自动更新。一旦应用程序中发生改变的部分被下载下来,就会在一个新的文件夹中重新安装更新后的程序。
- 对用户计算机的影响。使用Microsoft Windows Installer进行部署,应用程序通常需要使用一些共享的组件,这样就带来了潜在的版本冲突的风险;如果使用ClickOnce进行部署,每一个应用程序都是自包含的,不会随便使用其他应用程序的内容。
- 安全许可。使用Microsoft Windows Installer进行部署,需要管理员权限,这样只能允许有限的用户进行安装;使用ClickOnce进行部署,能够让没有管理员权限的用户安装应用程序,同时可以保证那些拥有代码访问安全许可的用户才能使用应用程序。
在过去,开发者有时会因为上述三个原因,决定抛弃Windows的应用程序,转而创建Web应用程序,这样为了简化安装过程,而牺牲了丰富的用户界面以及良好的性能。通过使用ClickOnce部署程序,一方面简化安装过程,另一方面,可以保留丰富的用户界面,可以鱼和熊掌兼得。
什么是ClickOnce应用程序?
简而言之,ClickOnce应用程序就是一个WPF、Windows Forms或者控制台应用程序,它使用ClickOnce技术进行发布。你可以通过三种不同的方式发布一个ClickOnce应用程序:通过Web页面发布、通过网络文件共享文件发布或者通过诸如光盘等媒体发布。ClickOnce应用程序可以安装在终端用户的计算机后在本地或者在线运行该应用程序,这时用户的计算机甚至可以是不在网络中的,ClickOnce应用程序还可以只允许在线运行,这时不会在终端用户的计算机上永久安装任何东西。
ClickOnce应用程序可以自动更新,当应用程序检测到有新版本后,就会自动替换任何需要更新的文件。开发者可以指定更新行为,网络管理员也可以控制更新的策略,例如,强制更新。终端用户或者管理员还可以使用更新将应用程序回滚到之前的某一个版本。
因为ClickOnce应用程序是被隔离的,因此安装或者运行一个ClickOnce应用程序并不会对已有程序造成影响。ClickOnce应用程序时自包含的。每一个ClickOnce应用程序都会安装到一个按照用户和应用程序进行划分的安全的缓存中,然后从缓存中运行该程序。默认情况下,ClickOnce应用程序运行在Internet或者Intranet安全区域内。如果有必要,应用程序可以要求额外的安全许可。
ClickOnce部署如何工作
ClickOnce部署架构的核心是基于两种XML清单文件:应用程序清单和部署清单。
应用程序清单描述了应用程序本身,包括程序集、依赖关系以及组成应用程序的那些文件、必需的许可、以及软件更新时需要访问的地址等。应用程序开发者可以使用Visual Sutdio 2008中的发布向导或者Windows SDK中的清单生成工具(Mage.exe)生成应用程序清单。
部署清单描述了应用程序是如何部署的,包括应用程序清单的位置、客户端在运行程序时应该使用的版本等。管理员可以通过Windows SDK中的清单生成工具(Mage.exe)来创建部署清单。
注:Visual Studio 2005中的部署向导工具同时也会生成一个部署清单。
在清单创建完成后,部署清单会被复制到部署位置上,这可以是一个Web服务器、网络共享目录或者诸如光盘等媒体,应用程序清单和应用程序包含的所有文件也会被复制到部署清单中指定个一个部署位置上。这两个位置可以是一样的,也可以不一样。当我们使用Microsoft Visual Studio 2005发布向导时,上面描述的复制操作会自动执行。
注:如果开发者同时也是管理员(或者说,拥有部署清单将要部署的Web站点或者共享文件的管理权限),那么只需要这个清单;如果开发者不是管理员,那么管理员必须使用命令行工具来对清单进行更新和签名。
当应用程序被部署到部署位置后,终端用户可以通过点击一个代表部署清单文件的图标来下载安装应用程序,清单文件可以存放在Web页面或者共享文件夹中。在大部分情况下,会向用户呈现一个简单的对话框,让用户确认是否需要安装,在此之后,开始安装的过程,就不再需要用户的干涉。对于那些需要额外安全许可的应用程序来说,在安装开始之前还会弹出一个对话框让用户确认是否拥有相应的权限。
应用程序会被添加到用户的开始菜单中,也会添加到控制面板中的添加/删除应用程序中,和其他部署技术不同,ClickOnce技术不会向Program Files目录、注册表或者桌面中添加任何内容,同时在安装过程中并不需要管理员的权限。
注:我们也可以阻止应用程序添加到开始菜单或者添加/删除应用程序中,这样看起来就像是一个Web应用程序。
当应用程序开发者创建了一个版本更新了的应用程序,他或者她应该生成一个新的应用程序清单,同时将其复制到部署位置——通常是和之前应用程序部署目录同级的一个文件夹。然后管理员更新部署清单,将其指向新版本应用程序所在的位置。
注:我们可以使用Microsoft Visual Studio 2005中的发布向导工具完成这些工作。
部署清单中除了部署位置之外,还应该包含一个更新位置(Web页面或者网络共享目录),应用程序通过访问该位置来检查是否需要更新。ClickOnce 的Publish属性用于指定应用程序检查版本的频率。更新行为可以在部署清单中指定,或者可以通过ClickOnce提供的API,为用户提供一个界面,让用户选择。另外,Publish属性还可以设置强制更新或者将程序回滚到之前的某个版本中。
ClickOnce技术和Windows Installer技术之间的比较
特点 | ClickOnce | Windows Installer |
自动更新 | 是 | 是 |
安装后回滚 | 是 | 否 |
从Web更新 | 是 | 否 |
不影响共享组件或者其他应用程序 | 是 | 否 |
安全许可 | 只保证针对应用程序必要的许可(更安全) | 默认情况下,完全信任(安全性低 |
必需的安全许可 | Internet或者Intranet区域(对于光驱安装来说,就是完全信任) | 管理员 |
应用程序清单和部署清单签名 | 是 | 否 |
安装时用户界面 | 简单的命令行 | 多部分向导组成 |
按需安装程序集 | 是 | 否 |
安装共享文件 | 否 | 是 |
安装驱动程序 | 否 | 是(通过自定义操作完成) |
安装到GAC中 | 否 | 是 |
将应用程序添加到开始菜单中 | 是 | 是 |
将应用程序添加到启动组中 | 否 | 是 |
将应用程序添加到收藏夹菜单中 | 否 | 是 |
注册表文件类型 | 否 | 是 |
安装时访问注册表 | 受限 | 是 |
二进制文件形式 | 否 | 是 |
应用程序安装位置 | ClickOnce应用程序缓存 | Program Files文件夹 |