msi文件的脚本安装

来源:互联网 发布:淘宝店铺贷款利率 编辑:程序博客网 时间:2024/06/06 05:28

 在我们日常的开发环境的搭建中,我们有时候需要安装很多的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用来监测文件是否已经在本地。

 

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

 

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

原创粉丝点击