msi文件的脚本安装

 在我们日常的开发环境的搭建中,我们有时候需要安装很多的msi文件,如果能把这些msi文件的安装自动化,我们就不用一个一个的双击,然后一步一步地安装。

 

介绍一下msi文件:

 

     说到MSI文件,不得不先说说Windows Installer,它不只是安装程序,而是可扩展的软件管理系统。Windows Installer的用途包括:管理软件的安装、管理软件组件的添加和删除、监视文件的复原以及使用回滚技术维护基本的灾难恢复。另外,Windows Installer还支持从多个源位置安装和运行软件,而且可以由想要安装自定义程序的开发人员自定义。要想使用这些功能,就必须通过MSI文件。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。MSI文件将程序的组成文件与功能关联起来。此外,它还包含有关安装过程本身的信息:如安装序列、目标文件夹路径、系统依赖项、安装选项和控制安装过程的属性。

  MSI的优势

  Windows Installer技术就是合并在一起发挥作用的两个部分:客户端安装程序服务(Msiexec.exe) 和Microsoft软件安装(MSI)软件包文件。

  Msiexec.exe 程序是 Windows Installer 的一个组件。 当 Msiexec.exe 被安装程序调用时,它将用 Msi.dll 读取软件包文件 (.msi)、应用转换文件 (.mst) 并合并由安装程序提供的命令行选项。 Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式、必要时显示提示对话框以便用户输入安装首选项。

  当双击MSI文件的时候,与之关联的Windows Installer 的一个文件Msiexec.exe 被调用,它将用Msi.dll读取软件包文件(.msi)、应用转换文件(.mst)进行进一步处理,然后 Windows Installer 执行所有与安装有关的任务:包括将文件复制到硬盘、修改注册表、创建桌面快捷方式,必要时显示提示对话框以便用户输入安装需要的信息,就这样,一个程序安装到了你的电脑上。

  采用MSI安装的优势在于你可以随时彻底删除它们,更改安装选项,即使安装中途出现意想不到的错误,一样可以安全地恢复到以前的状态,正是凭着此强大功能,越来越多的软件开始使用MSI作为发行的方式了。 如果你对MSI文件感兴趣,可以用WinRAR等压缩软件打开,看一下里面的内容,满足一下好奇心。

  MSI格式文件安装支持程序:WinMe和WinXP对MSI支持得很好,但其他版本的Windows就需要安装一个插件才能使用MSI格式的文件。

正式借助于Msiexec.exe 程序的功能,我们可以在我们的c#代码中调用这个程序,来实现我们的自动化代码,看下边的例子:

 

public static int ExecuteCommand(string Command, int Timeout)
        {
               int ExitCode;
               ProcessStartInfo ProcessInfo;
               Process Process;

               ProcessInfo = new ProcessStartInfo("cmd.exe", "/C " + Command);
               ProcessInfo.CreateNoWindow = true;
               ProcessInfo.UseShellExecute = false;
               Process = Process.Start(ProcessInfo);
               Process.WaitForExit(Timeout);
               ExitCode = Process.ExitCode;
               Process.Close();

               return ExitCode;
        }

 

此方法接受两个参数,command参数是我们要执行的命令,这里要注意的是命令中的双引号等字符。第二个参数timeout是我们可以容忍的等待时间。

 

main方法:

 

static void Main(string[] args)
  {
   
    //copy the source file from File Server
    string commands="xcopy /"w2bz9l2801//software//AET Project//AeTLAS Tools//ASPAJAXExtSetup.msi/" /"./"";
    //execute the copy command
    ExecuteCommand(commands,20000);
    
    if(!IsExistInCurrentDirectory("ASPAJAXExtSetup.msi"))
    {
     Console.WriteLine("File Copying Missing!!");
     return ;
    }
    
    commands="msiexec /passive /i /"ASPAJAXExtSetup.msi/"";

    ExecuteCommand(commands,200000);
    Console.WriteLine("Execute Correctely");
   
  }

 

这里还有一个方法IsExistInCurrentDirectory用来监测文件是否已经在本地。

 

另外需要注意就是目录,我这里的目录很有可能和你的不同,执行的时候请特别注意。

 

原创文章,转引请注明作者。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值