没有做过安装盘,因为一直做的都是项目,现场开发比较多,所以基本都是做的文件复制,而且是做的ASP.NET开发,所以部署更简单了,只要复制文件然后修改一下数据库配置就可以了。不过由于一个客户比较认真(他也认为直接复制更简单、方便),再加上市场上需要发布,所以就做了一个安装盘。
      想找一下现成的安装工具,比较好的要花钱,免费的效果又不好,而且做Web的发布相对简单,也不想去花钱买安装工具。有人说VS.NET的安装部署方案太简单,不好用。但由于是集成的,我们决定还是用VS.NET做安装盘。
      安装程序的具体工作就是:把程序复制到硬盘,然后在安装目录上创建虚拟目录,创建对应的数据库并配置。由于数据库允许重新创建、安装、配置,所以把程序安装和数据库安装分开了。前面的工作VS.NET的部署都能非常容易的完成,但创建虚拟目录需要自己处理了。
      也很简单,就是需要创建一个安装类库,继承自System.Configuration.Install.Installer,然后就可以自己处理的。下面是一个代码片断:

安装部署的问题using System;
安装部署的问题
using System.Xml;
安装部署的问题
using System.Collections;
安装部署的问题
using System.ComponentModel;
安装部署的问题
using System.Configuration.Install;
安装部署的问题
using Microsoft.Win32;
安装部署的问题
using System.IO;
安装部署的问题
安装部署的问题
namespace MyInstall
{

安装部署的问题
/// CreateDirVirtual 的摘要说明。
安装部署的问题
/// </summary>
安装部署的问题 [RunInstaller(true)]
安装部署的问题
public class CreateDirVirtual : System.Configuration.Install.Installer
{

安装部署的问题
/// 必需的设计器变量。
安装部署的问题
/// </summary>
安装部署的问题 private System.ComponentModel.Container components = null;

安装部署的问题
/// 安装状态保存用的,也可以不定义做为参数传递给相应的方法
安装部署的问题
/// </summary>
安装部署的问题 private System.Collections.IDictionary state = null ;
安装部署的问题
安装部署的问题
public CreateDirVirtual()
{
安装部署的问题
// 该调用是设计器所必需的。
安装部署的问题
InitializeComponent();
安装部署的问题
安装部署的问题
// TODO: 在 InitComponent 调用后添加任何初始化
安装部署的问题
}

安装部署的问题
/// 安装,即安装程序时会调用这个方法
安装部署的问题
/// </summary>
安装部署的问题
/// <param name="stateSaver"></param>
安装部署的问题 public override void Install(System.Collections.IDictionary stateSaver)
{
安装部署的问题
//保存安装信息
安装部署的问题
state = stateSaver ;
安装部署的问题
base.Install(stateSaver);
安装部署的问题
//创建虚拟目录的方法
安装部署的问题
this.Createvir();
安装部署的问题 }


安装部署的问题
/// 卸载,当卸载程序时调用的方法
安装部署的问题
/// </summary>
安装部署的问题
/// <param name="savedState"></param>
安装部署的问题 public override void Uninstall(IDictionary savedState)
{
安装部署的问题
//保存状态。需要注意的是:安装和卸载时并不在一个进程中,所以savedState并不相同
安装部署的问题
state = savedState ;
安装部署的问题
base.Uninstall (savedState);
安装部署的问题
//删除虚拟目录
安装部署的问题
DeleteDir(true) ;
安装部署的问题 }


安装部署的问题
/// 安装失败回滚时调用
安装部署的问题
/// </summary>
安装部署的问题
/// <param name="savedState"></param>
安装部署的问题 public override void Rollback(IDictionary savedState)
{
安装部署的问题
//保存状态
安装部署的问题
state = savedState ;
安装部署的问题
base.Rollback (savedState);
安装部署的问题
//删除虚拟目录
安装部署的问题
this.DeleteDir(false) ;
安装部署的问题 }

安装部署的问题

安装部署的问题
/// 删除虚拟目录
安装部署的问题
/// </summary>
安装部署的问题 public void DeleteDir(bool flag)
{
安装部署的问题
//没有参数,直接用变量处理的,取中安装信息中安装的虚拟目录的状态,如果包含,则删除,否则不处理
安装部署的问题
if(state != null && state["InstDirVirtual"] != null )
{
安装部署的问题
string virname = (string)state["InstDirVirtual"] ;
安装部署的问题
//这段代码是删除虚拟目录的,网上有现成的代码,不再显示了
安装部署的问题
}
安装部署的问题 }

安装部署的问题
//添加一个虚拟目录
安装部署的问题
public void Createvir()
{
安装部署的问题
//得到虚拟目录和安装路径
安装部署的问题
string virname="";
安装部署的问题
string setupPath="";
安装部署的问题
string virPath="";
安装部署的问题
string apprPath="";
安装部署的问题
//下面取出的注册表的信息都是VS.NET安装程序中保存到注册表中的
安装部署的问题
RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\CorpName");
安装部署的问题
string keyName = key.GetValue("LastKey").ToString() ;
安装部署的问题 key.Close() ;
安装部署的问题
安装部署的问题 key
= Registry.LocalMachine.OpenSubKey("SOFTWARE\\CoprName\\" + keyName,true) ;
安装部署的问题
//取虚拟目录的名字,是VS.NET安装过程中增加的文本输入对话框保留的。
安装部署的问题
virname = key.GetValue("DirVirtual").ToString();
安装部署的问题
string virBak = virname ;
安装部署的问题
//安装目录也是同样的。
安装部署的问题
setupPath = key.GetValue("ProgramFolder").ToString();
安装部署的问题 virPath
= Path.Combine( setupPath, keyName) + @"\";
安装部署的问题
//判断虚拟目录是否安装的代码,略
安装部署的问题
安装部署的问题
//把虚拟目录名保存到安装信息中,这些信息会保存到系统中以备卸载时使用
安装部署的问题
state["InstDirVirtual"] = virname ;
安装部署的问题
安装部署的问题
//其他处理
安装部署的问题

安装部署的问题 }



安装部署的问题
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
安装部署的问题
/// 此方法的内容。
安装部署的问题
/// </summary>
安装部署的问题 private void InitializeComponent()
{
安装部署的问题 components
= new System.ComponentModel.Container();
安装部署的问题 }

安装部署的问题
#endregion
安装部署的问题 }

安装部署的问题}

安装部署的问题
      开始是我同事写的,还说卸载或安装失败时虚拟目录没有删除。呵呵,他把VS.NET想象的太聪明了,所有的都看成了一个事务会自动 回滚。删除或安装失败回滚的操作还是要自己写的,就是要重载Uninstall和Rollback方法,保存到stateServer中的信息会写到系统中保存起来的,所以我们可以在里面保留一些自己的标识,也是我们卸载自己定义安装类安装的程序的一个重要消息来源。
      最后只要在安装部署的项目中增加上面的输出(程序集,我把安装类和安装部署项目放在一个解决方案中,直接增加项目输出即可),然后在安装部署项目的自定义操作中的安装、回滚、卸载操作中分别增加这个安装类项目的输入即可。
      其实做起来非常简单,可能就是开始要自己写一些操作比较麻烦。如果不是特别需要,感觉这样更加灵活。更重要的是:免费的,不怕用破解的安装工具对企业不利了。安装部署的问题
     

相关文章:

  • 2021-06-02
  • 2021-06-20
  • 2021-12-27
  • 2021-10-21
  • 2022-12-23
  • 2022-12-23
  • 2021-08-26
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-04-30
  • 2022-12-23
  • 2021-09-29
  • 2022-12-23
  • 2022-12-23
  • 2021-08-02
相关资源
相似解决方案