2010-08-24 53 views
2

我有以下片的服務代碼來安裝一組複製到一個給定的目錄MSI文件:一個進程內調用MSIEXEC失敗

private void InvokeInstallersIn(string path) 
    { 
     var di = new DirectoryInfo(path); 
     foreach (FileInfo fileInfo in di.GetFiles("*.msi")) 
     { 
      try 
      { 
       ProcessStartInfo start = new ProcessStartInfo(); 
       start.FileName = @"msiexec.exe"; // Specify exe name. 
       start.UseShellExecute = true; 
       start.RedirectStandardOutput = false; 
       start.WorkingDirectory = path; 
       var arguments = @"/I /l*v install.log /qn " + 
        fileInfo.Name + " REINSTALL=All REINSTALLMODE=amus"; 
       start.Arguments = arguments; 
       Logger.Info("Process: msiexec.exe {0}", arguments); 
       Process process = Process.Start(start); 
       process.WaitForExit(30000); 
      } 
      catch (System.Exception e) 
      { 
       Logger.ErrorEx(e, "Error installing '{0}'", fileInfo.Name); 
      } 
     } 
    } 

每當調用MSIEXEC它結束了顯示用法對話,而不是執行安裝。

更新

我可以通過Windows資源管理器安裝MSI,但不能在命令行的。此外,我無法更改msi文件上的文件權限,安裝程序在通過資源管理器調用時顯示「此文件沒有有效的數字簽名...」警告。 (我將這個文件複製到我自己的機器上的一個共享中,並通過\ localhost \ MyShare在資源管理器中訪問它)。也許現在的問題是 - 如何選擇從命令行覆蓋此警告。

任何線索,我要去哪裏錯了?

回答

1

微星名之後/我馬上所屬

string.format(@"/I {0} /l*v install.log /qnx REINSTALL=All REINSTALLMODE=amus", fileInfo.Name); 

至於警告,據我所知,你不能覆蓋它,但它會自動消失,如果你的數字微星具有有效簽名證書。

0

嘗試從提升的權限外殼運行MSIExec。