остановить / запустить службу или закрыть процесс / службу sql server на удаленном компьютере - PullRequest
4 голосов
/ 18 декабря 2011

Я пытаюсь завершить работу и запустить сервер sql на удаленном компьютере (в той же сети), я использовал этот код

ConnectionOptions options = new ConnectionOptions();
options.Username = userName;
options.Password = password;

ManagementScope scope = 
         new ManagementScope(
                       string.Format(@"\\{0}\root\cimv2", serverFullName),
                       options);
scope.Connect();

ObjectQuery query = new ObjectQuery(
                        string.Format(@"SELECT * FROM Win32_Process WHERE Name='{0}'",
                                      processToTerminate));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection queryCollection = searcher.Get();

foreach (ManagementObject m in queryCollection)
{
     m.InvokeMethod("Terminate", null);
}
  1. Есть ли другой способ сделать это?
  2. как я могу начать процесс (если Завершить закрыть его)?

Спасибо

Ответы [ 4 ]

5 голосов
/ 18 декабря 2011

А как насчет использования ServiceController класса? (см. MSDN )

// just replace the params with your values
ServiceController sc = new ServiceController("SERVICENAME", "MACHINENAME");
if (sc.Status.Equals(ServiceControllerStatus.Running))
    sc.Stop();

Это должно сработать.

НТН

4 голосов
/ 18 декабря 2011

Казалось бы, лот проще просто использовать класс ServiceController, которому вы можете присвоить имя службы и имя компьютера , а затем вызовите методы, такие как Start и Stop.

3 голосов
/ 18 декабря 2011

Завершение процесса и остановка службы - это две разные вещи.Служба может порождать другие процессы, которые останутся в прошлом.Кроме того, вы эффективно затягиваете процесс.Не дается никакого времени, чтобы аккуратно остановиться, записать все на диск и т. Д.

Вместо этого вам следует использовать объект WMI Win32_Service, чтобы найти свой сервис.Это метод StartService и StopService, который позволит вам останавливать и запускать его по мере необходимости.

Имейте в виду, этот объект WMI содержит служб , а не процессовпоэтому вам придется настроить свой код, чтобы он останавливался по имени службы, а не по имени процесса.Примерно так:

ConnectionOptions options = new ConnectionOptions();
options.Username = userName;
options.Password = password;

ManagementScope scope = new ManagementScope(string.Format(@"\\{0}\root\cimv2", serverFullName), options);
scope.Connect();

ObjectQuery query = new ObjectQuery(string.Format(@"SELECT * FROM Win32_Service WHERE Name='{0}'",serviceToStop));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

ManagementObjectCollection queryCollection = searcher.Get();

foreach (ManagementObject m in queryCollection)
{
   m.InvokeMethod("StopService", null);
}

Затем вы можете использовать InvokeMethod в StartService.

0 голосов
/ 13 июня 2015

вы можете сделать что-то подобное, чтобы запустить и остановить ваш sql сервер

System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = "net start \"Sql Server (SQLEXPRESS)\"";
    process.Start();
...