2014-09-26 210 views
-1

我正在尝试构建一个程序来安装我们的医院msi软件包。用C#编程安装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文件中工作。

+0

您的string.Format包含不匹配的引号 – AaronLS 2014-09-26 16:51:14

+2

您的格式字符串看起来不太好。你是否缺少一些引号?并且您从未在参数字符串中嵌入参数“{0}”。 – mason 2014-09-26 16:51:18

+0

你需要查看'string.Format'的工作方式,你正在使用的是格式化的参数。你错过了这样的事情,例如'“{0}”等...然后填写参数的值 – MethodMan 2014-09-26 16:54:08

回答

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}表示将第一个参数放在该loction。示例:

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." 
+0

工作正常谢谢! – Jgillette 2014-09-26 17:19:38