2014-09-26 138 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