gpt4 book ai didi

java - 使用包装器通过 Runtime.exec() 运行命令

转载 作者:行者123 更新时间:2023-12-01 15:18:28 25 4
gpt4 key购买 nike

我有服务器和客户端,客户端使用 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)运行。我想知道执行此操作的正确方法是什么(同样,从控制台它可以工作)。

最佳答案

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

关于java - 使用包装器通过 Runtime.exec() 运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11310536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com