2013-08-23 26 views
12

Mogę zdalnie uruchomić lub zatrzymać usługę z projektu .net.Jak zdalnie ponownie uruchomić usługę?

ConnectionOptions options = new ConnectionOptions(); 
options.Username = @"192.168.36.22\test"; 
options.Password = "test"; 
ManagementScope scope = new ManagementScope(@"\\192.168.36.22\root\cimv2", options); 
scope.Connect(); 


ManagementOperationObserver Stop = new ManagementOperationObserver(); 
Stop.Completed += new CompletedEventHandler(Stop_CallBack); 
try 
{ 
    string NameServices = "ArcGIS Server"; 
    WqlObjectQuery query = new WqlObjectQuery("SELECT * FROM Win32_Service WHERE Name=\"" + NameServices + "\""); 
    ManagementObjectSearcher find = new ManagementObjectSearcher(scope, query); 
    foreach (ManagementObject spooler in find.Get()) 
    { 
     spooler.InvokeMethod("StopService", new object[] { }); 
     spooler.InvokeMethod(Start, "StopService", new object[] { }); 
    } 
} 
.... 

Jak mogę ponownie uruchomić tę usługę?

+0

Możesz użyć stopu, a następnie rozpocząć. To jest to samo. – FelProNet

Odpowiedz

16

Można użyć klasy ServiceController tak:

ServiceController sc = new ServiceController("ArcGIS Server", "192.168.36.22"); 

sc.Start(); 
sc.Stop(); 

To oszczędza konieczności pisania cały ten kod do interakcji z WMI. Uwaga: aby użyć klasy ServiceController, musisz dodać odniesienie do zestawu System.ServiceProcess.

+0

Czy mogę ponownie uruchomić usługę za pomocą ManagementObject? – novicegis

+0

Tak, jeśli chcesz korzystać z ManagementObject, musisz po prostu przekazać "StartService" do InvokeMethod –

+1

Kiedy używam ServiceController, mam wyjątek "Nie mogę otworzyć Service Control Manager na komputerze" MAPSERVER. Ta operacja może wymagać innych uprawnień " – novicegis

-3

Znalazłem podobny problem, gdy próbowałem się połączyć, po prostu dodaj swoją nazwę komputera jako admin w grupie "użytkowników" komputera docelowego, a będziesz mógł pobrać dane.

Powiązane problemy