停止/启动服务或关闭远程计算机上的SQL server进程/服务

本文关键字:服务 SQL server 计算机 进程 启动 停止 | 更新日期: 2023-09-27 18:18:07

我正在尝试关闭和启动远程计算机上的sql server(在同一网络上),我已经使用了这个代码

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. 我如何启动进程(如果终止关闭它)?

谢谢

停止/启动服务或关闭远程计算机上的SQL server进程/服务

使用ServiceController类怎么样?(见MSDN)

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

这应该能奏效。

hth

似乎使用ServiceController类更容易,您可以为其提供服务名称和计算机名称,然后调用StartStop等方法。

终止进程和停止服务是两码事。一个服务可能会产生其他进程,而这些进程将继续存在。同时,你也在有效地终止这个过程。没有时间让它优雅地停止,将所有内容写入磁盘,等等。

您应该使用Win32_Service WMI对象来查找您的服务。它有一个StartServiceStopService方法,这将允许您根据需要停止和启动它。

注意,这个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);
}

然后你可以在StartService上使用InvokeMethod

你可以这样做来启动和停止你的SQL服务器

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