2011-04-06 151 views
1

我從SO Cannot restart a Service得到了一個鏈接,它說重新啓動windows服務。在c中重新啓動Windows服務#

應該重新啓動該服務的方式是在問題中提到的

public static void RestartService(string serviceName, int timeoutMilliseconds) 
{ 
    ServiceController service = new ServiceController(serviceName); 

    int millisec1 = Environment.TickCount; 
    TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); 
    if (!(service.Status.Equals(ServiceControllerStatus.Stopped) || service.Status.Equals(ServiceControllerStatus.StopPending))) 
    { 
     service.Stop(); 
     service.WaitForStatus(ServiceControllerStatus.Stopped, timeout); 
    } 
    // count the rest of the timeout 
    int millisec2 = Environment.TickCount; 
    timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - (millisec2 - millisec1)); 

    if (!(service.Status.Equals(ServiceControllerStatus.Running) || service.Status.Equals(ServiceControllerStatus.StartPending))) 
    { 
     service.Start(); 
     service.WaitForStatus(ServiceControllerStatus.Running, timeout); 
    } 
} 

,但我不知道在這裏,到哪裏寫的代碼。我需要重新啓動Windows服務,只要從我的應用程序安裝該服務

讓我知道是否需要任何輸入。

謝謝!

+0

你是什麼意思「從我的應用程序安裝」?如果您使用Windows Installer,則從安裝程序派生一個類。如果您手動安裝,請在安裝代碼後立即調用RestartService。但是,RestartService是從應用程序內部調用的。 – sprinter252 2011-04-06 06:47:07

+0

@ sprinter252:當我安裝我的Windows(桌面)應用程序時,該服務被安裝在services.msc中。之後,我希望重新啓動一次。怎麼做? – 2011-04-06 06:48:51

+3

安裝後爲什麼不使用net start? – 2011-04-06 07:01:09

回答

7

我只是使用net startnet stop來重新啓動服務。例如:

using System.Diagnostics; 

public static void RestartService(string serviceName) 
{ 
    var psi = new ProcessStartInfo("net.exe", "stop " + serviceName); 
    psi.WindowStyle = ProcessWindowStyle.Hidden; 
    psi.UseShellExecute = true; 
    psi.WorkingDirectory = Environment.SystemDirectory; 
    var st = Process.Start(psi); 
    st.WaitForExit(); 

    psi = new ProcessStartInfo("net.exe", "start " + serviceName); 
    psi.UseShellExecute = true; 
    psi.WindowStyle = ProcessWindowStyle.Hidden; 
    psi.WorkingDirectory = Environment.SystemDirectory; 
    st = Process.Start(psi); 
    st.WaitForExit(); 
} 
+0

我們可以在同一服務中開始停止服務嗎? – Thomas 2014-10-07 19:44:17