如何使用.NET在远程计算机上启动/停止/重启Windows服务

4

我目前正在开发桌面应用程序,可启动/停止/重启Windows服务。

    public static void StartService(string serviceName, int timeoutMilliseconds)
    {
        ServiceController service = new ServiceController(serviceName);
        try
        {
            TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

            service.Start();
            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
        }
        catch
        {
            // ...
        }
    }

现在我想要的是一段代码,在远程系统上执行相同的操作(另一个在同一网络中的系统)。
谢谢。

我想知道为什么你得到了一个-1? - David
1个回答

6

您需要使用接受机器名称的重载构造函数来实例化 ServiceController,例如:

ServiceController service = new ServiceController(serviceName, machineName);

嗨Rewinder, 非常感谢您的回答。当我使用这段代码访问其他服务器的服务时,我遇到了这个错误。“无法在计算机'PVUKRTSINJ02'上打开服务控制管理器。此操作可能需要其他特权。”PVUKRTSINJ02是我正在尝试连接的服务器。它位于另一个域中。但是我可以通过远程桌面连接使用我的凭据连接到此服务器。 - Arjun
@Nani:我认为那不是实际的异常。尝试在catch块中捕获异常,看看能否获取更有用的信息。 - Edwin de Koning
1
@Nani ServiceController使用不同的协议。请确保您没有阻止Microsoft网络的文件和打印机共享服务,并首先通过Microsoft网络的文件和打印机共享使用域凭据创建到目标计算机的连接。 - Sheng Jiang 蒋晟
我该如何在这里传递凭据以及机器名称? - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接