我有一个使用prcorun(does not inherit)作为Windows服务器运行的java进程;不幸的是,我必须启动一个用C / C ++编写的外部遗留命令。
两个
Process myProcess = Runtime.getRuntime().exec(command);
和
Process myProcess = new ProcessBuilder(command, arg).start();
在java作为独立应用程序启动时运行良好,但是当我作为服务启动java时,它会回复
command not found
还有
Process myProcess = Runtime.getRuntime().exec("dir");
command not found
我认为是由于Windows服务引起的问题。
有什么建议吗?
答案 0 :(得分:1)
我会尝试快速测试并在您的服务中打印PATH环境变量。当您将某个命令作为服务运行时,我通常会发现,PATH可能不完全可用(这也可以解释为什么DIR不适合您)。如果是这种情况,在启动服务时,您必须确保PATH包含普通垃圾箱和旧垃圾箱。
答案 1 :(得分:1)
如错误所示,在路径中找不到该命令。您需要将环境变量PATH设置为子进程的环境。看一下exec(cmd,String [] env)方法。您可以创建一个环境变量数组(键值对)并将其传递给exec()。
答案 2 :(得分:1)
在我的情况下,我使用了
private static String[] getEnv() {
Map<String, String> env = System.getenv();
String[] envp = new String[env.size()];
int i = 0;
for (Map.Entry<String, String> e : env.entrySet()) {
envp[i++] = e.getKey() + "=" + e.getValue();
}
return envp;
}
例如。 处理myProcess = Runtime.getRuntime()。exec(&#34; cmd / c dir&#34;);
我也添加了envinronments。正如smurf所建议的
Process myProcess = Runtime.getRuntime().exec("cmd /c dir",getEnv());
...
/
Alternative to java.lang.Runtime.exec() that can execute command lines as a single string?