使用ClickOnce发布Winform程序将使得程序的部署变得非常的方便,这篇文章就来介绍下ClickOnce的使用和部署过程中可能遇到的问题,权当梳理知识、日后备用。
微软官方对ClickOnce的解释是:ClickOnce 是一项部署技术,您可以利用这项技术来创建基于 Windows 的自行更新的应用程序,并且安装和运行这类应用程序所需的用户交互最少。
使用用ClickOnce主要解决了程序部署中的几个问题:
简单点说就是ClickOnce部署的程序可以自动更新,近乎绿色,且对程序的权限执行权限拥有更细的粒度。
下面是ClickOnce的基本架构图(图片来源)
我们先来看一下使用ClickOnce部署Winform程序后的发布界面,只要点击Install即可从部署的服务器下载程序安装运行了。
所以这里涉及到站点的建立,在Web服务器上建立一个站点以供发布新的ClickOnce包。
在建立站点前,我们需要如下图确认这两个组件是否已经启用。
启用后,建立一个站点,路径选择一个自己建立的空目录即可,其他的Web服务器的设置这里不再赘述。
在Winform项目上右键打开属性界面,配置好相关的编译属性,关于编译属性的详细配置可以参见前一篇文章:关于Winform编译配置那些事。
切换到发布标签,如下图所示。
在发布目录里面,可以选择Web、FTP、文件路径模式,这里我们填上我们之前配置好的空的Web站点即可。
在安装模式里面,支持两种安装模式:联机或脱机可用性。一般我们选择用户即使在断线的情况下也能使用发布的应用程序。
点击“程序文件”,打开对话框。
这里可以选择哪些文件可以发布到ClickOnce中,以便发布到客户端里面。
默认是将程序编译出的文件包含在ClickOnce包中,这里会遇到一个问题:如何将其他文件如一些说明文档在项目里更新后同时自动打包进部署包里。
比如我们在项目里面添加了一个Readme.txt,默认在我们发布新包时此文件是不会发布进去的。
如果我们需要每次发布进去,只要在Readme.txt上右键打开属性,配置这两个值即可。
而在必要组件对话框里面,ClickOnce会自动分析出需要的必要组件,当然你也可以自己选择必要组件,并可以配置是从供应商的页面下载组件、从我们自己配置的发布路径下载或者其他路径。
使用ClickOnce发布的程序一个最大的特点就是能够自动更新,即当运行的时候发现发布服务器上有新版本后即会自动更新后再运行,当然更新的策略也可以配置,我们打开“更新”对话框。
可以选择在程序启动前还是启动后更新程序。
或者按照时间间隔去检查更新并更新程序。
或者强制用户更新到某个版本。
也可以配置更新包在其他某个路径。
打开“属性”对话框,可以设置一些发布的基本属性。
如发布人、套件名称、程序名称等等,这里的一些设置会影响到部署页面的信息和用户安装后的目录。
当然这里还可以设置如:刻录成CD安装包后是否插入CD就自动运行,是否用户安装后在桌面创建快捷方式等等,可以自己去点开设置自己需要的东西,就不一一介绍了。
还可以设置是自动增加版本号还是自己设置,这里的版本号设置最好遵照版本号的使用原则,否则后期维护起来会很混乱,好的习惯往往会让你事半功倍。
在发布前,我们再说两个东西,那就是代码访问安全和程序签名。
这部分的解释和详细介绍可以看MSDN里面的保护应用程序章节。
然后点击发布按钮即可,发布成功后IE会自动打开发布好的页面,你只需要将发布的地址给需要安装此程序的客户就可以轻松完成程序的部署了。
ClickOnce使用下来我觉得一个最大的缺点就是不让用户选择安装的问题,默认会放在当前用户的 Documents and Settings 文件夹中 Local Settings 目录下的一系列隐藏目录。
设计的初衷是为了为应用程序存储提供一个位置,ClickOnce从用户那里接管了管理应用程序物理安装的任务。 通过对所有应用程序及其不同版本的程序集和数据文件进行独立保存,缓存还有助于隔离应用程序。
这样限制了ClickOnce的部署路径就很大方面限制了对ClickOnce的选择使用,真希望微软能把这个功能点改进掉。
希望你看到这个缺点的时候不要心底一凉,就像我当时发现有这个缺点时候的心情,按需选择就好。 :)