2015-11-10 23 views
2

我有一个java进程作为windows服务器运行,使用prcorun(http://commons.apache.org/proper/commons-daemon/);不幸的是我必须启动一个用C/C++编写的外部遗留命令。从java启动java进程时的过程

两个

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服务的一个问题。

什么建议吗?

回答

1

我会尝试做一个快速测试并在您的服务中打印PATH环境变量。当你将一些命令作为服务运行时,通常会发现,PATH可能不完全可用(这也可以解释DIR为什么不适合你)。如果是这种情况,当启动服务时,您必须确保PATH包含正常垃圾箱和旧垃圾箱。

1

由于错误提示,在路径中找不到该命令。您需要将环境变量PATH设置为子进程的环境。看看exec(cmd,String [] env)方法。您可以创建一组环境变量(键值对)并将其传递给exec()。

1

在我来说,我用

cmd /c <<YOUR COMMAND>> 

如。进程myProcess = Runtime.getRuntime()。exec(“cmd/c dir”);

我也加了envinronments。由蓝精灵

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; 
} 

...

Process myProcess = Runtime.getRuntime().exec("cmd /c dir",getEnv()); 

Alternative to java.lang.Runtime.exec() that can execute command lines as a single string?

建议