代码之家  ›  专栏  ›  技术社区  ›  novicegis

如何远程重新启动服务?

  •  20
  • novicegis  · 技术社区  · 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[] { });
        }
     }
    ....
    

    如何重新启动此服务?

    3 回复  |  直到 12 年前
        1
  •  33
  •   chris.house.00    12 年前

    您可以这样使用ServiceController类:

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

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

        2
  •  1
  •   Eduard Grinberg    5 年前

    服务控制器对我不起作用,所以我用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}\"");
            }
        }
    
        3
  •  -5
  •   Community Mohan Dere    9 年前

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