2015-11-10 36 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?

建議