当java作为服务运行时从java启动进程

时间:2015-11-10 20:24:33

标签: java c++ windows procrun

我有一个使用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服务引起的问题。

有什么建议吗?

3 个答案:

答案 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?