问题关闭从Windows服务网络电脑

时间:2010-11-03 08:20:47

标签: c# windows-services network-programming

我正在尝试从c#windows服务关闭网络上的远程计算机。当我在测试应用程序中运行下面的代码时它工作正常,但是当它从服务运行时没有任何反应。

我觉得它可能与权限有关,但不确定。

有人有任何建议吗?

Process p = new Process();
p.StartInfo.FileName = "shutdown";
p.StartInfo.Arguments = @"/s /f /m \\pc-name /t 0";
p.Start();

2 个答案:

答案 0 :(得分:1)

服务规范与其他凭据(本地系统,网络服务等)一起运行,而不是您的测试应用程序。您应该考虑创建具有适当权限的域用户,并将该用户添加到您的服务中。

答案 1 :(得分:0)

如果您在远程PC上登录的帐户没有 SE_SHUTDOWN_NAME 权限,则

关闭将失败。

MSDN article包含一个代码段,向您展示如何从程序中设置SE_SHUTDOWN_NAME权限(以及如何使用Windows API关闭/重新启动PC而不是调用shutdown命令)。

但是,由于您是远程运行而您可能无法以编程方式设置这些权限,因此可以通过以交互方式登录到远程计算机来执行此操作,并且:

  1. 运行 secpol.msc 以启动“本地安全设置”应用程序
  2. 转到左侧树中的安全设置/本地政策/用户权利分配
  3. 在右侧,双击关闭系统政策以打开其属性
  4. 确保将要调用shutdown的帐户列为具有该权限
  5. 你只需要这样做一次。

    祝你好运。