当前位置:首页>>开发编程>>VS.NET>>新闻内容
如何用VS.NET 2005制作安装程序
作者:冷枫 发布时间:2007-10-8 20:41:33 文章来源:CSDN

相信很多人都做过安装程序,目前最大功能最全的当属InstallShield,但是InstallShield的语法学习起来实在费劲,相对而言vs.net自带的安装部署短小精悍,且使用C#语法,对于一般C#开发者来说使用起来就极为简便,在对其作了一些研究之后,发现vs.net的安装部署项目的功能也已经非常好用,一般的程序安装都可以轻松实现,当然,在研究的过程中也发现了一些缺陷,这个后面再提。下面就向大家介绍一下ASP.NET安装部署项目的一些复杂应用实现: 首先我们假设存在一个已经完工的web项目eHRM,其文件列表如图



其中web.config中存在我们的数据库连接及系统的一些其他配置,如数据库类型等,这些配置需要在安装时进行修改。

OK,知道了我们的安装对象,现在开始做安装部署程序,首先,在解决方案中添加一个新项目,如图,项目类型为Web安装项目,项目名称eHRMSetUp。

 

项目添加完毕,选中eHRMSetUp,会发现工具栏发生了一些变化,如图所示:



主要有6个工具按钮,分别代码安装部署的6大编辑器:

1、表示文件系统编辑器,主要用于目标机器的文件安装操作。
2、表示注册表编辑器,用于目标机器的注册表操作。
3、表示文件类型编辑器,用于向目标机器安装新的文件类型。
4、用户界面编辑器,用于确定安装过程中所用到的一些界面。
5、自定义操作编辑器,调用用户自定义的操作代码。
6、启动条件编辑器,用于设置安装程序的启动条件。

这6个编辑器不一定全部会用到,我们的demo安装就只需要用到1/4/5大部分的安装包属性均存在于eHRMSetUp项目的属性中,属性界面如图:



在在这里可以设置产品名称(eHRMSetUp),产品编号(ProductCode)以及安装包全球化类型(Localization)等相关的安装程序属性。除了eHRMSetUp安装部署项目,我们还需要添加一个eHRMSetUpCompenent项目,用来自定义安装操作,在eHRMSetUpCompenent项目中添加一个新的安装程序类,如图:



名称为eHRMInstaller.cs,在其中添加如下代码:
protected override void OnAfterInstall(IDictionary savedState) {
    base.OnAfterInstall (savedState);
}
public override void Install(IDictionary stateSaver) {
    base.Install (stateSaver);
}
protected override void OnBeforeInstall(IDictionary savedState) {
    base.OnBeforeInstall (savedState);
}
public override void Uninstall(IDictionary savedState) {
    base.Uninstall (savedState);
}
public override void Rollback(IDictionary savedState) {
     base.Rollback (savedState);
}

这些代码将主要负责对于安装中的操作进行自定义处理,包括建数据库,配置web.config等。为了在安装部署中调用项目eHRMSetUpCompenent定义的操作,需要在项目eHRMSetUp中添加eHRMSetUpCompenent的主输出和项目eHRM的内容输出,具体操作是选择eHRMSetUp项目后右键 —— 添加 —— 项目输出 ——选择项目eHRMSetUpCompenent的主输出,添加完毕后如图:



现在回到项目eHRMSetUp,打开文件系统编辑器,点击Web应用程序文件夹,编辑其属性,属性界面如下:



其中比较重要的就是VirtualDirectory属性,表示安装后建立的虚拟目录名称,其他属性视具体情况而定。下面通过用户界面编辑器来配置用户的安装界面,vs.net2003目前所提供的窗口比较少,如图:



基本是几个比较简单的配置窗口,所以如果需要用到一些复杂的配置,那么这些窗口就远远不够用了,不过我们可以进行部分的扩展来实现这些复杂的配置,具体方法如下:

1、在项目eHRMSetUpCompenent中添加一个windows窗口FrmConfig.cs,设计我们需要用的界面。

2、修改eHRMInstaller.cs中的代码如下:
protected override void OnAfterInstall(IDictionary savedState) {
     FrmConfig _FC = new FrmConfig();
     _ FC.ShowDialog();
     base.OnAfterInstall (savedState);
}

3、这样,在安装的过程中会中断并弹出FrmConfig让用户进行配置。最后就是通过自定义操作编辑器来设置安装过程中的自定义操作,从web应用程序文件夹选择主输出来自eHRMSetUpCompenent(活动),添加完毕如图所示:

 

分别设置4个主输出的CustomActionData属性为: /LogicDir=[TARGETDIR] /VitualDir=[TARGETVDIR][TARGETDIR]和[TARGETVDIR]是系统部署自带属性,分别表示安装物理目录地址和虚拟目录地址。设置完这些自定义操作的传入参数后就可以直接在eHRMSetUpCompenent项目的代码中进行调用,调用代码如下:

public override void Install(IDictionary stateSaver)
{
    //安装物理目录
    string LogicDir = Context.Parameters["LogicDir"];
    //安装虚拟目录
    string VitualDir = Context.Parameters["VitualDir"];
    //根据配置安装操作
    base.Install (stateSaver);
}
最后需要做的就是卸载时的一些文件处理:
public override void Uninstall(IDictionary savedState) {
     //安装物理目录
     string LogicDir = Context.Parameters["LogicDir"];
     //安装虚拟目录
     string VitualDir = Context.Parameters["VitualDir"];
     //处理自定义部分的安装内容,如数据库等
     base.Uninstall (savedState);
}

完成了这一系列动作后,整个程序的安装雏形已经基本OK,只要在相应的地方加入实际安装中所需要进行的一系列Action就可以制作一个完整的安装部署程序。

注意事项:

1、Resource文件属于项目的源文件,而非内容文件,所以如果项目中有Resource文件存在,则需要添加项目的源文件输出,同时利用排除筛选器设置好对*.cs文件和*.resx文件的过滤。
2、Bin目录默认不在web项目中,所以打包还需要加入web项目的主输出或直接把bin目录下的文件加入到web项目中,这样生成的dll会包含在内容文件输出中。
3、安装制作过程中某些目录可能会无法创建(偶没能找到具体原因,估计是因为文件依赖性的缘故),则可以手工在Web应用程序文件夹中直接创建。


最新更新
·C#中使用Split分隔字符串的技
·VS2008开发中Windows Mobile
·PC机和移动设备上绝对路径的
·C#程序加壳的方法(使用Sixx
·当前上下文中不存在名称Conf
·请插入磁盘:Visual Studio 2
·用VS.NET读取Flash格式文件信
·在ASP.NET中使用AJAX的简单方
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻
相关信息
·VS2008开发中Windows Mobile 5.0 emulator连网的配置
·C#程序加壳的方法(使用Sixxpack)
·当前上下文中不存在名称ConfigurationManager的解决方法
·请插入磁盘:Visual Studio 2005 DVD
·用VS.NET读取Flash格式文件信息
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻略
·VS.NET 2005 常用的快捷键大全
·VS.NET2005智能感知失效的解决办法
·VS.NET 2005 + VSS6.0简单应用示例
 画心
 愚爱
 偏爱
 火苗
 白狐
 画沙
 犯错
 歌曲
 趁我
 稻香
 小酒窝
 狮子座
 小情歌
 全是爱
 棉花糖
 我知道
 钻石糖
 Nobody
 我爱他
 套马杆
 星空物语
 最后一次
 少女时代
 穿越人海
 断桥残雪
 美了美了
 明天过后
 我很快乐
 到了明天
 心痛2009
 爱丫爱丫
 寂寞好了
 敢不敢爱
 郎的诱惑
 爱情买卖
 super girl
 我叫小沈阳
 i miss you
 姑娘我爱你
 我们都一样
 其实很寂寞
 习惯了寂寞
 我要的飞翔
 我的好兄弟
 爱的华尔兹
 李雷和韩梅梅
 贝多芬的悲伤
 爱我就跟我走
 丢了幸福的猪
 我只是个传说
 要嫁就嫁灰太狼
 即使知道要见面
 如果我变成回忆
 看得最远的地方
 斯琴高丽的伤心
 别在我离开之前离开
 不是因为寂寞才想你
 爱上你等于爱上了错
 在心里从此永远有个你
 一个人的寂寞两个人的错