相信很多人都做过安装程序目前最大功能最全的当属InstallShield但是InstallShield的语法学习起来实在费劲相对而言自带的安装部署短小精悍且使用C#语法对于一般C#开发者来说使用起来就极为简便在对其作了一些研究之后发现的安装部署项目的功能也已经非常好用一般的程序安装都可以轻松实现当然在研究的过程中也发现了一些缺陷这个后面再提
下面就向大家介绍一下ASPNET安装部署项目的一些复杂应用实现
首先我们假设存在一个已经完工的Web项目eHRM其文件列表如图
)thisstylewidth=; twffan=done>
其中nfig中存在我们的数据库连接及系统的一些其他配置如数据库类型等这些配置需要在安装时进行修改
OK知道了我们的安装对象现在开始做安装部署程序首先在解决方案中添加一个新项目如图项目类型为Web安装项目项目名称eHRMSetUp
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
项目添加完毕选中eHRMSetUp会发现工具栏发生了一些变化如图所示
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
主要有个工具按钮分别代码安装部署的大编辑器
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>表示文件系统编辑器主要用于目标机器的文件安装操作
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>表示注册表编辑器用于目标机器的注册表操作
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>表示文件类型编辑器用于向目标机器安装新的文件类型
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>用户界面编辑器用于确定安装过程中所用到的一些界面
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>自定义操作编辑器调用用户自定义的操作代码
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>启动条件编辑器用于设置安装程序的启动条件
这个编辑器不一定全部会用到我们的demo安装就只需要用到//大部分的安装包属性均存在于eHRMSetUp项目的属性中属性界面如图
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
在这里可以设置产品名称(eHRMSetUp)产品编号(ProductCode)
以及安装包全球化类型(Localization)等相关的安装程序属性
除了eHRMSetUp安装部署项目我们还需要添加一个eHRMSetUpCompenent项目用来自定义安装操作在eHRMSetUpCompenent项目中添加一个新的安装程序类如图
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
名称为eHRMInstallercs在其中添加如下代码
borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=black border=>ee>
protected override void OnAfterInstall(IDictionary savedState)
{
baseOnAfterInstall (savedState);
}
public override void Install(IDictionary stateSaver)
{
baseInstall (stateSaver);
}
protected override void OnBeforeInstall(IDictionary savedState)
{
baseOnBeforeInstall (savedState);
}
public override void Uninstall(IDictionary savedState)
{
baseUninstall (savedState);
}
public override void Rollback(IDictionary savedState)
{
baseRollback (savedState);
}
这些代码将主要负责对于安装中的操作进行自定义处理包括建数据库配置nfig等
为了在安装部署中调用项目eHRMSetUpCompenent定义的操作需要在项目eHRMSetUp中添加eHRMSetUpCompenent的主输出和项目eHRM的内容输出具体操作是选择eHRMSetUp项目后右键 —— 添加 —— 项目输出 ——选择项目eHRMSetUpCompenent的主输出添加完毕后如图
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
现在回到项目eHRMSetUp打开文件系统编辑器点击Web应用程序文件夹编辑其属性界面如下
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
其中比较重要的就是VirtualDirectory属性表示安装后建立的虚拟目录名称其他属性视具体情况而定
下面通过用户界面编辑器来配置用户的安装界面目前所提供的窗口比较少如图
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
基本是几个比较简单的配置窗口所以如果需要用到一些复杂的配置那么这些窗口就远远不够用了不过我们可以进行部分的扩展来实现这些复杂的配置具体方法如下
在项目eHRMSetUpCompenent中添加一个Windows窗口FrmConfigcs
设计我们需要用的界面
修改eHRMInstallercs中的代码如下
borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=black border=>ee>
protected override void OnAfterInstall(IDictionary savedState)
{
FrmConfig _FC = new FrmConfig();
_FCShowDialog();
baseOnAfterInstall (savedState);
}
这样在安装的过程中会中断并弹出FrmConfig让用户进行配置
最后就是通过自定义操作编辑器来设置安装过程中的自定义操作从web应用程序文件夹选择主输出来自eHRMSetUpCompenent(活动)添加完毕如图所示
src=http://imgeducitycn/img_///jpg width= onload=javascript:if(thiswidth>)thisstylewidth=; twffan=done>
分别设置个主输出的CustomActionData属性为
/LogicDir=[TARGETDIR] /VitualDir=[TARGETVDIR]
[TARGETDIR]和[TARGETVDIR]是系统部署自带属性分别表示安装物理目录地址和虚拟目录地址
设置完这些自定义操作的传入参数后就可以直接在eHRMSetUpCompenent项目的代码中进行调用调用代码如下
borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=black border=>ee>
public override void Install(IDictionary stateSaver)
{
//安装物理目录
string LogicDir = ContextParameters[LogicDir];
//安装虚拟目录
string VitualDir = ContextParameters[VitualDir];
//TODO 根据配置安装操作
baseInstall (stateSaver);
}
最后需要做的就是卸载时的一些文件处理
borderColorDark=#ffffff cellPadding= width= align=center borderColorLight=black border=>ee>
public override void Uninstall(IDictionary savedState)
{
//安装物理目录
string LogicDir = ContextParameters[LogicDir];
//安装虚拟目录
string VitualDir = ContextParameters[VitualDir];
//处理自定义部分的安装内容如数据库等
baseUninstall (savedState);
}
完成了这一系列动作后整个程序的安装雏形已经基本OK只要在相应的地方加入实际安装中所需要进行的一系列Action就可以制作一个完整的安装部署程序
注意事项
Resource文件属于项目的源文件而非内容文件所以如果项目中有Resource文件存在则需要添加项目的源文件输出同时利用排除筛选器设置好对*cs文件和*resx文件的过滤
Bin目录默认不在web项目中所以打包还需要加入web项目的主输出或直接把bin目录下的文件加入到web项目中这样生成的dll会包含在内容文件输出中
安装制作过程中某些目录可能会无法创建(偶没能找到具体原因估计是因为文件依赖性的缘故)则可以手工在Web应用程序文件夹中直接创建