奇怪的行爲我有一些Java代碼在Windows機器上執行某個命令。但是,這種行爲很奇怪,因爲同一個命令在一臺機器上運行,但在另外三臺機器上運行失敗。據我所知,四臺機器都是相同的。Runtime.getRuntime()。exec()
該命令是這樣的:
cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=%APP_HOME%\logs\errors.log -arg3 some more parameters
凡%APP_HOME%
是一個系統變量設置爲值 「d:/路徑/到/程序」。
我得到的錯誤是這樣的:有關無法打開日誌之一或「相關文件」
應用特定的錯誤消息: d:/路徑/到/程序\日誌。錯誤號= 13,權限被拒絕
Java的我正在使用這樣的外觀:
Runtime.getRuntime().exec(cmdStr);
哪裏cmdStr
是包含命令在上述字符串。現在,我知道的事情是;
- 我真正應該使用重載的Runtime.exec(字符串[])方法
- 該命令使用的前一組合和反斜槓
這些都是有效的意見,我可能會最終解決問題,但我想解決的是爲什麼完全相同的代碼失敗只有在4臺機器中有3臺。
是的,命令中提到的所有路徑都存在於該框中。
它變得更奇怪。如果我執行以下(非常相似)的命令,它可以在所有四個框中正常工作。
cmd /c %APP_HOME%\..\..\some\more\path\executable -arg1=value1 -arg2=value2 -errorlogname=D:\path\to\program\logs\errors.log -arg3 some more parameters
在上述工作版本,該唯一的區別是%APP_HOME%
參考已被替換爲-errorlogname
參數的絕對路徑。但是變量已經留在可執行文件的位置。
現在,相同的代碼在一個盒子上運行良好的事實讓我懷疑問題不是Java代碼。同樣,斜槓方向的混合我不認爲是一個問題,因爲這種混合在一臺機器上工作。
在我看來,它應該在每臺機器上都失敗。不只是其中之一。很顯然,如果一切都完全相同,它會在每臺機器上破壞(或工作)。但是我認爲所有的東西都是一樣的。
其他人可以提出其他建議嗎?
非常感謝。
每個框上的%APP_HOME%的值是多少?您是否確信每臺計算機上都安裝了相同版本的可執行文件,並且具有相同的用戶設置和文件權限? – AndyT 2011-04-07 16:07:26
您是否在所有機器上的命令行中嘗試了命令,如果您能重現問題,那肯定不是java問題...... – pgras 2011-04-07 16:35:02