2010-12-07 96 views
0

最初我運行此代碼時沒有使用前導"cmd",我收到拒絕訪問消息。 Postgres由一個無法登錄的帳戶作爲服務運行,我是一名運行此應用程序的管理員。包含"cmd"的嘗試不會返回任何輸入。我的問題是如何執行這些語句來實現結果文件和數據更改?通過Java運行調用postgres命令Runtime.getruntime.exec()

String[] psqlCommands = {"cmd ",postgresLocation, " -dDatabase ", " -UUser ", 
       "-c ", "UPDATE host.user SET service = 1 WHERE service = 1;" + 
         "UPDATE host.permission SET service = 1 WHERE service = 2"}; 
     Runtime.getRuntime().exec(psqlCommands); 

     String[] pgDumpCommands = {"cmd ", postgresLocation, " --data-only ", 
       "-t host.user_info -t host.permission -t host.group -t host.account -t host.password " + 
         "-UUser Database> " 
         + DATA + "\\dataExport.sql"}; 

     Runtime.getRuntime().exec(pgDumpCommands); 

所生成的異常是一個例外Access Denied即在Postgres_Bin目錄。一旦我獲得必要的材料,我會發佈一個跟蹤。

Exception in thread "main" java.io.IOException: Cannot run program "d:\program f iles\postgres\bin": CreateProcess error=5, Access is denied
at java.lang.ProcessBuilder.start(Unknown Source) at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Thing.main(Thing.java:85)
Caused by: java.io.IOException: CreateProcess error=5, Access is denied
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 4 more

+0

CMD,你可以發佈你有 – 2010-12-07 13:28:46

+0

一些異常或錯誤消息,這是訪問被拒絕,我將突出顯示在我的崗位 – Woot4Moo 2010-12-07 13:29:23

回答

1

產生java.io.IOException:不能運行程序 「d:\ Program Files文件\ Postgres的\ BIN」

此錯誤指示路徑的空間混淆的exec()調用(和目錄確實沒什麼Windows可以運行的)

請確保您使用雙引號括住空格的.exe的完整路徑。

我認爲使用ProcessBuilder建議使用exec(),因爲您可以指定參數和程序以不同參數運行,避免使用空格轉義路徑名。不需要

1

首先,如果你想運行在Windows的情況下殼的東西,你必須使用cmd /c。否則,你只是運行cmd本身。這是你沒有得到任何東西的原因。

修復代碼時,預計會得到拒絕訪問,與您沒有使用cmd時完全相同,因爲您似乎沒有足夠的權限。解決問題 1.修復您的權限 2.如果不可能嘗試使用runas命令以不同用戶的身份運行外部進程。

1

從錯誤它看起來你試圖運行目錄,而不是附加「psql」或「pg_dump」來獲得實際的可執行文件名稱。

我也相信你不需要在開頭加入「cmd」,所以請再試一次。