【问题标题】:How to restart service remotely?如何远程重启服务?
【发布时间】:2013-08-26 16:26:56
【问题描述】:

我可以从 .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[] { });
    }
 }
....

如何重新启动此服务?

【问题讨论】:

  • 可以先停止再启动。是一样的。

标签: c# service wmi arcgis wmi-service


【解决方案1】:

服务控制器不适合我,所以我用 Cmd 来做。

Process.Start("CMD.exe", "/C sc \\\\remoteMachine stop \"serviceName\"&sc \\\\remoteMachine start \"serviceName\"");

为了克服凭据问题,我使用了 https://stackoverflow.com/a/5433640/2179222 答案中的课程。

所以最后看起来是这样的:

    private static void RestartService(string remoteMachine, string serviceName, string userName, string password)
    {
        using (new NetworkConnection($"\\\\{remoteMachine}", new NetworkCredential(userName, password)))
        {
            Process.Start("CMD.exe", $"/C sc \\\\{remoteMachine} stop \"{serviceName}\"&sc \\\\{remoteMachine} start \"{serviceName}\"");
        }
    }

【讨论】:

  • remoteMachine 可以是 IP 地址吗?
  • 是的,它也适用于我的 IP 地址
【解决方案2】:

我在尝试连接时遇到了类似的问题,只需将您的机器名称添加为目标机器的“用户”组中的管理员即可获取数据。

【讨论】:

    【解决方案3】:

    您可以像这样使用 ServiceController 类:

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

    这使您不必编写所有代码来与 WMI 交互。注意要使用 ServiceController 类,您必须添加对 System.ServiceProcess 程序集的引用。

    【讨论】:

    • 我可以使用 ManagementObject 重新启动服务吗?
    • 是的,如果你想使用ManagementObject,那么你只需将“StartService”传递给InvokeMethod
    • 使用 ServiceController 时出现异常“无法在计算机 'MAPSERVER' 上打开服务控制管理器。此操作可能需要其他权限”
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多