2015-11-02 179 views
1

我要運行用C#CMD命令在Windows中安裝的服務,我使用的代碼如下:cmd命令不執行在C#

class Program 
{ 
    static void Main(string[] args) 
    { 
     System.Diagnostics.Process process = new System.Diagnostics.Process(); 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     startInfo.CreateNoWindow = false; 
     startInfo.FileName = "cmd.exe"; 
     startInfo.Arguments = 
      "\"C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil.exe\" \"D:\\Projects\\MyNewService\\bin\\Release\\MyNewService.exe\""; 
     process.StartInfo = startInfo; 
     process.Start(); 

    } 
} 

但這個方案不工作。如果我在cmd.exe中運行這個命令可以正常工作,但是當我運行這個項目時不要執行命令並且MyNewService.exe不要安裝。

我的問題在哪裏? 你幫我嗎?

+4

您是否運行cmd runas管理員? –

+1

是的,我的項目以管理員身份運行。在此之前,我添加了startInfo.Verb =「runas」;但不工作。 –

回答

3

不是啓動cmd.exe並將installutil作爲參數傳遞(然後將服務executabel作爲參數的參數),請嘗試直接傳遞MyNewService.exe作爲參數來啓動installutil.exe可執行文件。

您應該始終等待進程退出,並且應該始終檢查進程的退出代碼,如下所示。

static void Main(string[] args) 
{ 

    System.Diagnostics.Process process = new System.Diagnostics.Process(); 
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
    startInfo.CreateNoWindow = true; 
    startInfo.FileName = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\installutil.exe"; 
    startInfo.Arguments = "D:\\Projects\\MyNewService\\bin\\Release\\MyNewService.exe"; 
    process.StartInfo = startInfo; 
    bool processStarted = process.Start(); 
    process.WaitForExit(); 
    int resultCode = process.ExitCode; 
    if (resultCode != 0) 
    { 
     Console.WriteLine("The process intallutil.exe exited with code {0}", resultCode); 
    } 
} 
+1

謝謝,它的工作。 –