相信很多人都做过安装程序,目前最大功能最全的当属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(活动),添加完毕如图所示:

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应用程序文件夹中直接创建。

转载于:https://www.cnblogs.com/slcfhr/archive/2006/07/18/453824.html

VS.NET安装部署深入研究相关推荐

  1. Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

    MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服 ...

  2. DinnerNow - 如何安装部署

    DinnerNow - 如何安装部署  记得还是去年七月份.在微软的一次培训中,一位姓杨的讲师提到了这个DEMO.我后来回到公司就从相关站点 http://www.dinnernow.net 下载了一 ...

  3. mysql简单部署_安装部署Mysql实例(最简单快速噢)

    题外话 作为Mysql DBA,我们平时必须要熟练的一个最最基础的技能,即安装部署Mysql实例,所以本文分享一个快速安装部署Mysql实例的方法. 一.环境介质准备 Mysql安装包准备 服务器准备 ...

  4. 时空大数据实践之GeoWave安装部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 时空大数据实践之GeoWave安装部署实践 GeoWave是由国家地理空间情报局(NGA)与RadiantBlue和Booz ...

  5. Wix 安装部署(二)自定义安装界面和行为

    Wix 安装部署(二)自定义安装界面和行为 原文:Wix 安装部署(二)自定义安装界面和行为 上一篇介绍了如何联合MSBuild来自动生成打包文件和对WIX的一些初步认识,http://www.cnb ...

  6. 安装部署Ceph Calamari

    2019独角兽企业重金招聘Python工程师标准>>> 根据http://ovirt-china.org/mediawiki/index.php/%E5%AE%89%E8%A3%85 ...

  7. Cloudera简介和安装部署概述

    Cloudera简介和安装部署概述 原创2016年09月06日 11:27:10 标签: Cloudera / 大数据 / CDH / Hadoop 12285 最近作者在研究Cloudera,并且在 ...

  8. 在Centos7下Hyperledger Cello安装部署和简单使用

    超级账本Hyperledger Cello安装部署和简单使用 Cello GitHub Hyperledger Cello 帮助有效管理区块链网络. 用途 快速构建区块链即服务(BaaS)平台. 立即 ...

  9. 14.Flink1.11 安装部署及Release 文档解读

    Flink1.11 安装部署及Release 文档解读 1. [Flink 1.11 Release 文档解读](https://ci.apache.org/projects/flink/flink- ...

最新文章

  1. 大厂程序员跳槽去小公司当CTO,是一种怎样的体验?
  2. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)
  3. spring 同时配置hibernate and jdbc 事务
  4. IntelliJ IDEA 运行 Maven 项目
  5. EVGA Precision—— 显卡超频神器 可用于调节风扇转速 降温
  6. 负载均衡集群HAProxy安装篇
  7. 如果走单招学计算机好考吗,单招一般多少分过 走单招好不好
  8. CI框架下nginx重写规则
  9. Commons Configuration2 - Quick start guide
  10. 消息队列---RabbitMQ深入研究(含Springboot+RabbitMQ整合)
  11. CrashLoopBackOff问题排查
  12. VS2008 ~ VS2019下载地址
  13. golang 对象转json
  14. es6-es12简单总结
  15. LDA模型,主题聚类模型
  16. 数据可视化大屏真不是个事,这 30 个精美的模板拿走吧
  17. 【2016NOIP十连测】【test4】【状压DP】【容斥原理】巨神兵
  18. Windows程序设计-剪贴板
  19. 解决无法将主机文件拖动复制到VMware虚拟机中的问题
  20. php汉字全是问号_PHP-PHP中文显示问号问题

热门文章

  1. GridFS读文件代码示例
  2. 【面试题】Ajax的原理和优缺点总结
  3. centos7.9使用ssh命令进行登陆云服务器
  4. 在Mac下SVN(Cornerstone)迁出代码
  5. 【总结】分类、聚类的评估指标
  6. 【已解决】linux redhat 6 如何打开防火墙中的某个端口?例如:5900端口
  7. JS重点语法及常用对象总结
  8. arcgis python脚本实现从界面选择输入输出_ArcGIS Python脚本实现数据驱动页面的批量出图...
  9. 类加载、类加载器、反射
  10. Cortex-M3 任务切换函数实例