停止/启动服务或关闭远程计算机上的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);
}
- 有其他方法吗?
- 我如何启动进程(如果终止关闭它)?
谢谢
使用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
类更容易,您可以为其提供服务名称和计算机名称,然后调用Start
和Stop
等方法。
终止进程和停止服务是两码事。一个服务可能会产生其他进程,而这些进程将继续存在。同时,你也在有效地终止这个过程。没有时间让它优雅地停止,将所有内容写入磁盘,等等。
您应该使用Win32_Service
WMI对象来查找您的服务。它有一个StartService
和StopService
方法,这将允许您根据需要停止和启动它。
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();