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

标签 java wrapper

我有服务器和客户端,客户端使用 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/

相关文章:

python - 将 pandas 函数包裹在我自己创建的函数中

java - 完成后如何处理 Java 代码

java - 部署新版本 (com.google.common.cache.CacheBuilder)

php - 不同的包装背景图像 wordpress 自定义模板

python - 分配(而不是定义)一个 __getitem__ 魔法方法会破坏索引

python - keras:返回 model.summary() 与 scikit 学习包装器

java - MapReduce 中的聚合

java - jar找不到里面文件的路径

java - 在java webapp中存储属性文件中的属性的位置

c# - .NET 工具 : Extract Interface and Implement Wrapper Class