2013-08-23 4 views
12

Я могу начать или прекратить сервис удаленно из проекта .net.Как перезапустить службу удаленно?

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[] { }); 
    } 
} 
.... 

Как перезапустить эту службу?

+0

Вы можете использовать остановку, а затем начать. Это то же самое. – FelProNet

ответ

16

Вы можете использовать класс ServiceController так:

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

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

Это экономит, чтобы писать весь код для взаимодействия с WMI. Примечание. Чтобы использовать класс ServiceController, вам нужно добавить ссылку на сборку System.ServiceProcess.

+0

Могу ли я перезапустить службу с помощью ManagementObject? – novicegis

+0

Да, если вы хотите использовать ManagementObject, вам просто нужно передать «StartService» на InvokeMethod –

+1

Когда я использую ServiceController, у меня есть исключение «Не удается открыть диспетчер управления сервисом на компьютере« MAPSERVER ». Эта операция может потребовать других привилегий« – novicegis

-3

У меня возникла аналогичная проблема, когда я пытался подключиться, просто добавьте свое имя компьютера в качестве администратора в группу «пользователей» целевой машины, и вы сможете получить данные.