0

我有服务器和客户端,客户端使用wrapper在后台运行。服务器使用以下方式向客户端发送命令,客户SocketChannels端以这种方式运行命令:

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);

当我像往常一样从控制台运行客户端时,这很有效。但是当我将它作为 Windows 服务运行时,一些命令不起作用。例如:

runtime.exec("shutdown -s -t 300");// works perfectly
runtime.exec("shutdown -a");       // works perfectly
runtime.exec("shutdown -l");       // works only when client started from console
// note that these commands will shutdown your computer or log off

第三个命令根本不做任何事情,然后程序正常工作。我以随机顺序单独运行命令,没有区别。我正在使用 Windows。

那么我做错了什么?

此外,我无法从服务“notepad.exe”(或另一个具有完整路径的 .exe)运行。我想知道这样做的正确方法是什么(再次,从控制台它可以工作)。

4

1 回答 1

1

默认情况下,Windows 服务无法与桌面交互。如果您的命令需要用户通过某些 GUI 做出任何类型的响应,它将挂起。解决它的一种方法是允许您的服务与桌面交互(在 SCM 中的服务属性上)。另一种方法是简单地避免这种交互。我没有尝试过,但我认为-y开关应该可以解决重启的问题。第二种选择是我想要的。

于 2012-07-03T12:25:39.370 回答