为XNA制做安装程序(二)使用Visual Studio自带发布功能

上一篇:综述
在Visual Studio 2008下,无论是webform还是winform都可以在解决方案管理器中的项目名称上单击右键,然后选择“发布”,一直点下一步直到完成,会弹出发布项目所在的目录,供你做成压缩包使用。

但在这之前最好先进行一系列的设置,以适应我们千变万化的用户。首先还是打开项目属性,确认目标Framework的版本是2.0(在上一讲中设置过),然后在“发布”选项目卡中选择“发布”,点击“系统必备”:

2009111102图1

在打开的窗口中,我们选择系统必备的组件:.NET Framework 2.0和最下面的Microsoft XNA Framework Redistributable 3.1,在下面的安装位置中,选择“从我的应用程序相同的位置下载系统必备组件”,可以让用户不用再到网络中去下载组件:

2009111103

需要网络更新的话,可以在图1处点击“更新…”打开“应用程序更新”对话框,勾选“应用程序应该检查更新”,选择“应用程序启动前”,还可以定义一个与发布位置不同的更新位置,填写一个网址,这里填写http://xna.omgsoft.com.cn/publish/

2009111206

点击图1的“选项”,在说明的选项卡中,可以填写发行者名称,它将做为开始菜单中的项目目录名称,如果不填的话,这个目录名称将为“Microsoft”。产品名称就是开始菜单中启动项目的名称,如果不填写,开始菜单中的启动项目名称将是项目名称,因为项目名称通常为英文,大家可以在这里把产品称改成中文。

2009111207

然后回到上面第一张图中点击“发布向导”或“立即发布”,输出窗口会提示发布完成:

========== 生成: 成功或最新 1 个,失败 0 个,跳过 0 个 ==========
正在生成 Jewels...
正在连接到“C:\Users\han\Desktop\jewels-v1.0-src\publish\”...
正在发布文件...
发布成功。
C:\Users\han\Desktop\jewels-v1.0-src\publish\

这个目录就是安装目录,可以放到本地或是传到网络更新位置,打开这个目录,可以看到发布的目录和文件:

2009111104

setup.exe 就是用户需要执行安装的文件;
Jewels.application 是一个XML格式的安装配置文件;
xnafxredist31 里面是XNA3.1的可再发行组件包安装程序;
dotnetfx 是.net 2.0的安装程序,共四个文件,包括一个instmsia.exe安装程序,WindowsInstaller-KB893803-v2-x86.exe:Installer3.1安装程序,dotnetfx.exe:.net2.0安装程序,langpack.exe:.net2.0的简体中文语言包;
Application Files 中就是我们的程序部署文件目录,不同的版本在不同的文件夹中,本例的版本号是1.0.0.2(见图1),这个目录就是Jewels_1_0_0_2,再打开里面就多是.deploy的部署文件。

值得说明的一点就是,在图1中如果选中了“随每次发布自动递增修订号”的话,每次发布,修订号就是自增,而Application Files中的文件夹也会依次增加,并不会删除之前版本的部署文件。用户使用时通常就是下载、解压、安装、Play,所以完整下载打包安装时不应将旧版的部署文件也给用户下载了去。
微软这样做的原意是可以让用户使用网络更新和程序的版本回滚,对于我们日常的游戏程序来说,不希望非特殊原因让用户进行版本回滚的操作,只要删除Application Files目录中之前的版本目录就可以了。

这样打包在Win7环境下的安装十分顺利,因为我这里不用装Framework和XNA,装完了程序立即运行:

2009111202

在开始菜单中的fhmsha目录(发行者名称为空的话就是Microsoft目录)加入了一个Application Reference (.appref-ms)格式的文件,用记事本打开:

file:///C:/Users/han/Desktop/jewels-v1.0-src/publish/Jewels.application#Jewels.application, Culture=neutral, PublicKeyToken=9f604d67a5d4a2c7, processorArchitecture=x86


这个位置就是程序每次运行会检查更新的地方,如果在这里发布了新的版本,应用程序发现后就会先行安装,再启动程序。
如果在更新设置时填写了更新的网络位置,这个Application Reference 的文件内容就会是:

http://xna.omgsoft.com.cn/publish/Jewels.application#Jewels.application, Culture=neutral, PublicKeyToken=9f604d67a5d4a2c7, processorArchitecture=x86

程序启动时会检查这个网络位置,要是发布了新的版本,在程序运行时就会提示如下内容,然后下载更新并安装启动:

2009111208


如果不采用以上的网络更新的安装方法,那么每次用户要下载安装新版本时,必须从C:/Users/han/Desktop/jewels-v1.0-src/publish/处启动安装程序才可以,如果安装目录改变的话(不是第一次成功安装的位置)安装时会弹出错误(如下图),这对于完全下载安装的用户是一个麻烦的事情。而如果选择了使用网络更新的话,就无法在本地下载升级了,需要先卸载旧版本再安装新的版本:

2009111205 


再看安装位置,本例中,程序实际的安装位置在
C:\Users\han\AppData\Local\Apps\2.0\YTJ87LKZ.P37\BH5QXWEJ.DXT\jewe..tion_9f604d67a5d4a2c7_0001.0000_00c1f331b1d2c60c,
项目数据文件安装在
C:\Users\han\AppData\Local\Apps\2.0\Data\EMYV7RLX.JOX\33Q23Z90.OXZ\jewe..tion_9f604d67a5d4a2c7_0001.0000_00c1f331b1d2c60c\Data
像谷歌浏览器一样,用户不能自由选择安装位置,但是可以容易的实现自动更新和版本回滚的操作,实际应用中需要权衡。

在控制面版的卸载或更改程序中,右击该项目,只有一个选项:“卸载/更改(U)”,点击就会显示下图,如果安装过同一项目的两个以上版本,“Restore the application to its previous state”项就是可选的,但并无法显示到底可以恢复到哪个版本:

2009111201 

 

再看看在xp下安装的情况,同样无法选择安装路径,点击.NET Framework2.0接受许可协议后,还需要点击XNA Framework Redistributable 3.1的打接受许可协议,就不再抓图了:

 2009111203

准备工作之后正式安装,之后的和Win7下的情况差不多了:

2009111204

本例安装位置在
C:\Documents and Settings\Administrator\Local Settings\Apps\2.0\G1YGMRVL.CX4\LPGQYQDT.RZH\jewels.exe_9f604d67a5d4a2c7_0001.0000_none_cb5f4668a9b22599
数据文件位置在
C:\Documents and Settings\Administrator\Local Settings\Apps\2.0\Data\X6RXN913.45M\X8LOJAOD.7YE\jewe..tion_9f604d67a5d4a2c7_0001.0000_ac7a003445b164db\Data

验证程序可以运行。卸载对话框: 

2009111209

总结一下,自带的安装程序集成了更新方案和版本回滚功能,甚至可以要求程序只能联机使用,代价就是不能自定义安装路径和本地更新的繁琐。这种自带的发布功能不太适合没有网络空间的开发者。

在Visual Studio中还有一个特殊的项目安装和部署,可以将程序、网站、数据库等打包成MSI安装程序,下回写。

希望本文能对您有所帮助。

没完待续。

posted @ 2009-11-12 19:20  风海迷沙  阅读(3201)  评论(6编辑  收藏  举报