用C#编程安装msi

时间:2014-09-26 16:46:36

标签: c# .net

我正在尝试构建一个程序,为医院安装我们的msi软件包。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WindowsInstaller;
using System.Diagnostics;

namespace TestApp
{
    public class InstallerTest
    {
        public static void Main()
        {
             //Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");
            //Installer installer = (Installer)Activator.CreateInstance(type);
            //installer.InstallProduct("C:\\Paragon_12.1.msi /qn     ADDLOCAL=DR,PI,MR,OM,PM,PV,RA,RM,RG,SR,ST,TR,AP,AS,GL,JS,PP,QM,UR,CC,ED,FA,LB,MM,MA,OR,PS,PR,RX,CR,RD,RS KEY_CC=blank KEY_ED=blank KEY_FA=blank KEY_LB=blank KEY_MA=blank KEY_MM=blank KEY_OR=blank KEY_PR=blank KEY_PS=blank KEY_RD=blank KEY_RS=blank KEY_RX=blank, @"C:\Paragon_12.1.msi");

            Process process = new Process();
            process.StartInfo.FileName = "msiexec.exe";
            process.StartInfo.Arguments = string.Format("/qn ADDLOCAL=DR,PI,MR,OM,PM,PV,RA,RM,RG,SR,ST,TR,AP,AS,GL,JS,PP,QM,UR,CC,ED,FA,LB,MM,MA,OR,PS,PR,RX,CR,RD,RS KEY_CC=blank KEY_ED=blank KEY_FA=blank KEY_LB=blank KEY_MA=blank KEY_MM=blank KEY_OR=blank KEY_PR=blank KEY_PS=blank KEY_RD=blank KEY_RS=blank KEY_RX=blank, @"C:\Paragon_12.1.msi");
            process.StartInfo.Verb = "Open";
            process.Start();
            process.WaitForExit();

        }

    }
}

我已经想到了这个,但是当我运行它时,它只显示我可以使用的开关,我想默默地安装这个程序并添加序列号。它适用于bat文件。

1 个答案:

答案 0 :(得分:0)

更改

process.StartInfo.Arguments = string.Format("/qn ADDLOCAL=DR,PI,MR,OM,PM,PV,RA,RM,RG,SR,ST,TR,AP,AS,GL,JS,PP,QM,UR,CC,ED,FA,LB,MM,MA,OR,PS,PR,RX,CR,RD,RS KEY_CC=blank KEY_ED=blank KEY_FA=blank KEY_LB=blank KEY_MA=blank KEY_MM=blank KEY_OR=blank KEY_PR=blank KEY_PS=blank KEY_RD=blank KEY_RS=blank KEY_RX=blank, @"C:\Paragon_12.1.msi");

process.StartInfo.Arguments = string.Format("/i \"{0}\" /qn ADDLOCAL=DR,PI,MR,OM,PM,PV,RA,RM,RG,SR,ST,TR,AP,AS,GL,JS,PP,QM,UR,CC,ED,FA,LB,MM,MA,OR,PS,PR,RX,CR,RD,RS KEY_CC=blank KEY_ED=blank KEY_FA=blank KEY_LB=blank KEY_MA=blank KEY_MM=blank KEY_OR=blank KEY_PR=blank KEY_PS=blank KEY_RD=blank KEY_RS=blank KEY_RX=blank", @"C:\Paragon_12.1.msi");

这会将第二个参数放在你的字符串中,我会引用它,以防你最终得到一个有空格的路径。我还在它前面添加了/i开关。

{0}表示将第一个参数放在该位置。例如:

string result = String.Format("Hello {0}, how are you? My name is {1}.", "Jim", "Bob");
//result will be "Hello Jim, how are you? My name is Bob."