当前位置:首页>>开发编程>>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应用程序文件夹中直接创建。


最新更新
·当前上下文中不存在名称Conf
·请插入磁盘:Visual Studio 2
·用VS.NET读取Flash格式文件信
·在ASP.NET中使用AJAX的简单方
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻
·ASP.NET后台代码实现XmlHttp
·ASP.NET取得当前页面的完整U
·如何在ASP.NET程序里面执行D
·IIS5IIS6IIS7的ASP.net请求处
相关信息
·当前上下文中不存在名称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简单应用示例
·VS.NET2005 web程序自定义安装包的制作
·完全卸载Visual Studio 2008 Beta2的步骤
放生
愚爱
够爱
触电
白狐
心跳
知足
犯错
降临
分爱
葬爱
光荣
画心
火花
稻香
爱得起
这种爱
大丈夫
花蝴蝶
二缺一
小酒窝
下雨天
右手边
安静了
棉花糖
明天过后
边做边爱
擦肩而过
没有如果
怀念过去
等一分钟
越来越爱
寂寞暴走
你的承诺
Nobody
我们都一样
永远在身边
天使的翅膀
原谅我一次
i miss you
原谅我一次
吻的太逼真
姑娘我爱你
做你的爱人
一定要爱你
飞向别人的床
爱上别人的人
感动天感动地
心在跳情在烧
不潮不用花钱
如何能把你忘记
即使知道要见面
爱上你是一个错
最后一次的温柔
爱上你是我的错
怎么会狠心伤害我
亲爱的那不是爱情
伤心时候可以听情歌
爱上你等于爱上了错
不是因为寂寞才想你