有向客户机安装一个msi软件包,想采用自动安装方式。

查看MSDN发现微软为Msi命令行的安装模式

msi软件包静默安装方式为

***.msi /qn (不会显示任何窗口,直接在后台自动安装。)

 

msi软件包所有安装参数如下:

msiexec /Option <Required Parameter> [Optional Parameter]

安装选项
 </package | /i> <Product.msi>
  安装或配置产品
 /a <Product.msi>
  管理安装 - 在网络上安装产品
 /j<u|m> <Product.msi> [/t <Transform List>] [/g <Language ID>]
  播发产品 - m 播发到所有用户,u 播发到当前用户
 </uninstall | /x> <Product.msi | ProductCode>
  卸载产品
显示选项
 /quiet
  安静模式,无用户交互
 /passive
  无从参与模式 - 只显示进程栏
 /q[n|b|r|f]
  设置用户界面级别
  n - 无用户界面
  b - 基本界面
  r - 精简界面
  f - 完整界面(默认值)
 /help
  帮助信息
重新启动选项
 /norestart
  安装完成后不重新启动
 /promptrestart
  提示用户重新启动(如果必要)
 /forcerestart
  安装后总是重新启动计算机
日志选项
 /l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>
  i - 状态消息
  w - 非致命警告
  e - 全部错误消息
  a - 操作的启动
  r - 操作特定记录
  u - 用户请求
  c - 初始界面参数
  m - 内存不足或致命退出信息
  o - 磁盘空间不足消息
  p - 终端属性
  v - 详细输出
  x - 额外调试信息
  + - 扩展到现有日志文件
  ! - 每一行刷新到日志
  * - 记录所有信息,除了 v 和 x 选项
 /log <LogFile>
  与 /l* <LogFile> 相同
更新选项
 /update <Update1.msp>[;Update2.msp]
  应用更新
 /uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>
  删除产品的更新
修复选项
 /f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode>
  修复产品
  p - 仅当文件丢失时
  o - 如果文件丢失或安装了更旧的版本(默认值)
  e - 如果文件丢失或安装了相同或更旧的版本
  d - 如果文件丢失或安装了不同版本
  c - 如果文件丢失或较验和与计算的值不匹配
  a - 强制重新安装所有文件
  u - 所有必要的用户特定注册表项(默认值)
  m - 所有必要的计算机特定注册表项(默认值)
  s - 所有现有的快键方式(默认值)
  v - 从源运行并缓存本地数据包
设置公共属性
 [PROPERTY=PropertyValue]

 

有了以上的介绍,在调用CMD命令进行安装就变得轻松了。

Process p = new Process();
                p.StartInfo.FileName = "cmd.exe";           //设定要运行的程序名
                p.StartInfo.UseShellExecute = false;        //关闭Shell的使用
                p.StartInfo.RedirectStandardInput = true;   //重定向标准输入
                p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
                p.StartInfo.RedirectStandardError = true;   //重定向错误输出
                p.StartInfo.CreateNoWindow = true;          //隐藏CMD窗口

                p.Start();   //启动进程
                p.StandardInput.WriteLine("cd D:\\Programe\\Downloads");
                p.StandardInput.WriteLine(".net FrameWork4.0.msi /qn");       //待执行的命令
                p.StandardInput.WriteLine("exit");        //退出