VS向IIS发布C#或VB应用程序
简单介绍如何使用ClickOnce发布Windows应用程序。开发者一般按以下步骤操作即可达到发布的目的。
此文只介绍最简单的使用。更高级的使用目前正在学习,希望可以尽快完善此文档。
更详细请参看微软在线MSDN,上面的介绍很详细,有时间将整理加入到此文档。
ClickOnce简介
ClickOnce 部署使您可以将基于 Windows 的应用程序发布到 Web 服务器或网络文件共享以简化安装。Visual Studio 对通过 ClickOnce 部署的应用程序的发布和更新提供完全支持。ClickOnce 部署可用于使用 Visual Basic、Visual C# 和 Visual J# 创建的项目,但不能用于使用 Visual C++ 创建的项目。
使用ClickOnce的好处
使用ClickOnce发布Windows应用程序可以使用户方便地更新应用程序,可以起到B/S的效果,当程序更新了不必每一个用户重新安装更新。程序发布者只需要把新版本放到服务器,程序使用者在启动软件或退出软件时即可更新软件(更详细参看图解发布过程)。
当然,要使安装过程更可视化、在安装过程加入更多操作则应该自己制作安装程序。
图解发布过程
首先,选择要发布的项目,右点击选择“属性”,然后选择“发布”选项页,如下图所示:
要发布软件,首先弄明白好以下几项
l 发布位置
也就是程序发布生成的文件存放在哪里。这些路径可以是URL、共享文件夹、本机绝对路径。
l 安装URL
也就是当用用户需要安装此软件时应该访问的路径,将在这里下载文件进行安装。这里路径必须是URL。此路径一般为服务器的IIS站点路径。例如你发布的程序存放在本机IIS站点http://localhost:8000/AnthorTest/。但发布后的程序要放到客户的服务器里,如果客户的服务器的IIS站点在局域网里的路径为http://192.168.1.174:8012/Setup 。则安装URL应该输入这路径。
当客户需要安装软件时,只需要访问此路径,点击“安装”后即会有安装的过程提示。
l 更新位置
即客户使用软件时,当软件启动或退出软件时将访问的路径。当软件访问此路径时,将检测是否有新的版本,如有则提示是否安装更新。
这个路径应该是客户服务器IIS站点,程序发布后的文件将复制到此站点的所在目录里(如果此路径与发布路径不同)。
当此路径与发布路径不同,点击“更新”按钮将出现如下界面,然后填入相应路径即可。
l 安装模式和设置
一般选择“可以脱机使用”。否则必须与“更新路径”所在机器连通才能使用软件。
ClickOnce高级选项
下面简要解释各选项
应用程序文件
这里罗列了发布程序时,将包括(发布)的文件。
注意:VS的此功能并不十分完善,如果程序引用了OFFICE组件,它会把stdole.dll、Office.dll以及Microsoft.Vbe.Interop.dll作为系统必备,当在客户机安装时就有可能出现的版本不同的错误(因为安装的office版本不同,而这一般不影响程序使用),此时,你应该把这些DLL的“发布状态”更改为“包括”,这样就不会出再错误。
系统必备
主要选择软件在安装时将自动安装的组件。开发者可以根据开发所用到的组件进行选择。例如使用了水晶报表,则应该把“水晶报表查看器”组件选上。
还有需要注意的是,为了使用客户安装软件时更方便,一般选择“从与我的应用程序相同的位置下载系统必备组件”。这样,安装程序的相同路径下将包括这些组件。当客户安装软件时,如果计算没有必备的组件,将从这些路径下载组件进行安装。
更新
这里是程序的更新选项。开发者可根据需要选择。
选项
在这里可以设置一些高级的选项或输入一些高级信息。如选择“发布语言”等。
发布路径有可能选择在本机,而服务器部署并不一定在本机,例如在开发者的机器发布,而需要把文件拷贝到客户的服务器进行部署,这要求“发布路径”与“安装路径”、“更新路径”不同外,最好此时把“验证上载到Web服务器的文件”这项的选定取消,因为“安装路径”和“更新路径”很有可能不存在,如果取消此项的选定,会大大加快发布速度。
同时,也可以把“部署网页”改成不是“publish.html”。这也可以在一定程序度上防此别人恶意访问网站。
选择ClickOnce更新策略
设计 ClickOnce 应用程序时,需要确定应用程序将使用何种策略来检查可用的更新。有三种基本策略可以使用:在应用程序启动时检查更新、在应用程序启动后检查更新(在后台线程中运行)或是提供进行更新的用户界面。此外,还可以确定应用程序检查更新的时间间隔,并且可以强制必须执行更新。
服务器部署
按照“安装路径”把发布的文件拷贝到相应的机器的相应IIS站点下即可。例如“安装路径”为http://192.168.1.147/DorichTourSetup, 则把文件拷贝到此机器下默认网站(端口为80)下的虚拟路径“DorichTour”。
特别要注意,此“虚拟目录”的“文档”选项的文档为“publish.htm”。这样才能使需要安装程序的客户顺利进入安装界面。下面几幅图为此“虚拟路径”的几个配置截图,部署人员可参考:
l 配置“文档”为publish.htm
l 配置目录安全性
“目录安全性”下的身份验证应设置为“允许匿名访问”
注意:如果“更新路径”和“安装路径”不同,则在“更新路径”所在的机器要作同样的配置。这两个路径一般相同,如有不同开发人员将与部署人员协商一致。
客户端部署
服务器部署完后,需要安装程序的客户只需要访问“安装路径”的站点,即出现如下界面,点击“安装”按钮即有相应提示:
注意,安装的整个过程为自动安装,安装后的文件存放的路径一般位于C:\Documents and Settings\Administrator\Local Settings\Apps\2.0\H7V6QMR5.4DG\QY7X63PH.TLV下的相应路径,其中“Administrator”为安装程序系统的登陆者,如果以上路径不存在,就找到路径C:\Documents and Settings\Administrator\Local Settings\Apps\2.0然后寻找相应的路径。当然有一个办法肯定可以找到所在路径:在C:\Documents and Settings路径下搜索相应的文件,例如安装后在“开始”—“程序”那出现“DorichTour”,则你可以在此路径下搜索“DorichTour.exe”即可以搜索到相应的文件,从而知道路径所在。
为不同应用客户生成发布包
当为不同客户生成发布包时,可以按上述步骤重新生成一仆发布包。但缺点是很明显的:有可能客户很多;可能软件完成后开发环境不一定完整保存,而按上述步骤重新需要完整的开发环境;不同客户使用的应用程序相同,所不同其实就只是安装路径。
所以,最好能利用现有的发布包为不同的客户生成发布包。下面介绍如何在不重新生成应用程序的情况下利用现有的发布包为不同用户生成发布包。
可参考MSDN的“手动部署ClicokOnce应用程序”。但对于ClickOnce发布不熟悉者一般不赞成完全使用手动发布。应该使用上上述步骤生成发布包后再按下面的介绍为不同用户生成不同的用户发布包。
准备工作
l 确定部署的类型
如果部署类型需要在使用CD自动运行安装,必然包括Setup.exe文件,并且此文件包括了一些部署信息,无法修改。所以此时则必须为不同的用户重新生成新的发布包。
如果不是使用CD自动运行安装,可以在现有发布包的基础上为不同客户生成不同的发布包。请继续往下看。
l 处理Setup文件
如果不是采用CD自动运行安装的形式。可以不包括此Setup.exe 文件。可以把它删除。
l 处理publish.htm文件
Public.htm文件的“安装”按钮默认链接到Setup.exe文件。请修改为连接到“部署清单”文件。
如:把HREF="setup.exe"
修改为HREF="ClickOnceExample.application"
同时,因为使用VS2005IDE生成ClickOnce部署包时会默认更新publish.htm文件,其实此文件可以不重新生成,除非只有一个客户。当需要为publish.htm文件加入相应的内容更更新相应的内容,可以修改publish.htm的源文件。为了保持publish.html文件不变,请在“选项”处取消“每次发布后都自动生成部署网页(G)”选项。
生成应用程序清单
应用程序清单一般位于版本文件。命名格式为:全称.exe.manifest。此文件存储了此应用程序部署时应该包括的文件。
如果没有发布包里的文件(此版本文件夹里的全部文件)作修改,则不需要对应用程序清单进行处理。
如果对发布包的的任何文件作了修改,如修改了应用程序配置文件里的内容。则需要重新生成新的应用清单。此时,用工具mageui.exe(此工具为.net sdk2.0自带,同时在项目“ClickOnceExample”项目下的“工具”文件夹里有保存)打开相应的应用程序清单,然后“保存”。保存时会要求签名,开发者可选择相应的证书文件,一般选择应用程序第一次发布时生成的证书文件(使用VS2005IDE发布ClickOnce应用程序时,会自动生成一个证书文件)。
同时需要说明一下的是,发布包的文件默认使用deloy作为文件的后缀,主要是防止用户修改而造成必须重新生成应用程序清单。而有时为不同客户生成发布包需要修改相应的文件,所以可以在“选项”处取消“使用deloy文件扩展名”选项。
生成部署清单
为不同客户生成不同的发布包,关键是部署清单,它决定了安装时从何处安装。这个文件必须重新生成。
使用工具mageui.exe打开相应的部署清单,修改相应的选项,其中需要修改一般为以下选项:StartLocation和Application Reference。其中StartLoation指明了安装时指向的部署清单,应该为站点的完整路径+部署清单名,如:http://192.168.1.75/ClickOnceExample/ClickOnceExample.application;Application Reference指明了所指向的应用程序清单,应该选择相应版本文件夹里应用程序清单。然后保存。保存时要求签名,此时切记使用刚才应用程序清单签名时相同的证书文件。
部署清单的编辑如下图。部署清单编辑完成后,原来的发布包即为新的客户的发布包,直接把此发布包部署即可。
注意事项
解决方案各项目设置
ClieckOnce主要是把Windows应用程序发布。当解决方案存在多个Windows应用程序时,将会使用发布过程变得很复杂、麻烦。通常会失败(目前我没有尝试发布多个Windows应用程序的解决方案)。
所以,一般解决方案只包含一个Windows应用程序(通常为启动项目),其它项目均应该为类库项目。这样,发布过程将如上面介绍的那样简单、顺利。
当存在输出文件
例如项目中存在WORD文档或EXCEL文档,并且此文档输出到一定的路径。这就在一般的项目只需要在文档的属性窗口中的“复制到输出项目”选项选择“如果较新则复制”或“始终复制”。如果使用ClickOnce发布Windows应用程序,还要在“生成操作”选项中选择“内容”。如此才能使用文档在发布时一起发布,否则无法发布文档而导致软件在使用过程中出错。
DLL版本问题
可以到“应用程序文件”(下图)里找到相应的DLL,把 “发布状态”更改为“包括”,这样可能可以排除错误。因为ClickOnce技术的这项功能不够完善,会把一些不是必要的DLL当作是必备的DLL。
提示网络错误
这一般分为真正的网络设备有问题。但如果查看详细信息,错误提示里有“XX文件下载错误”。则多为配置的错误。如“配置文件”下载失败,则多为IIS的配置问题。请确保IIS的ASP.NET配置版本为2.0。如下图: