2010-05-20 77 views
1

我想將一個現有的.exe文件從一個目錄複製到另一個目錄,然後用Java啓動它。就像這樣:Java:複製一個exe文件並在之後啓動失敗

FileIO.copy(new File(sourceFile), new File(targetFile)); 
System.out.println("Existing: " + new File(targetFile).exists()); 
System.out.println("Launching " + targetFile); 
String cmd[] = { targetFile }; 
Process p = Runtime.getRuntime().exec(cmd); 
p.waitFor(); 
System.out.println("Result: " + p.exitValue()); 

輸出是這樣的:

Existing: true 
Launching C:\test\Launcher.new.exe 
Result: 2 

所以Java說,該文件是有效的和現有的,但Windows,因爲它認爲該文件是不是就不能啓動進程那裏。路徑是絕對的,並帶有反斜槓。我也擁有對這些文件的所有權限,所以我可以執行它們。 Launcher.new.exe由Launch4j生成,因此它或多或少是獨立的。至少它不依賴於同一個文件夾中的DLL。但奇怪的是:它在我複製並啓動notepad.exe時起作用。

還有一件奇怪的事情:如果我不通過Java複製文件,而是手動複製文件,啓動失敗時也會出現相同的錯誤。

操作系統是帶有SP1的Vista。

任何線索?

+0

ProcessMonitor顯示沒有錯誤並聲明文件已啓動。但之後也沒有發生任何事情。 – Philip 2010-05-20 14:53:33

+0

你試圖啓動什麼樣的過程? Vista中可能會對UAC犯規。 – mdma 2010-05-20 14:57:14

+0

這是我開發的一個.exe文件。沒有UAC彈出。 也沒有沙箱般的東西的「安全軟件」。 – Philip 2010-05-20 14:58:42

回答

0

嗯...我不知道這可能是在玩Vista的美妙用戶訪問控制...

你Program Files文件中工作?如果是這樣,將所有內容移到單獨的文件夾(c:\ CopyTest)中,然後再試一次 - 看看是否有幫助...

+0

我已經從文件夾「C:\ test」進行測試。 我也懷疑某種怪異的虛擬化,但我不知道如何檢查它。 – Philip 2010-05-20 14:57:59

+0

您可以以管理員身份運行任何方式來排除任何Vista惡意? – 2010-05-21 08:43:16

+0

我已經以管理員身份運行。 – Philip 2010-05-21 13:48:18

0

如果您的路徑包含正斜槓,則可能需要在exec之前嘗試將它們更改爲反斜槓。另外,您應該嘗試將路徑設置爲絕對路徑,包括驅動器號和冒號(例如C:\test\myprog.exe)。請注意,如果您在Java字符串中編碼路徑,則需要將反斜槓加倍...

一旦您獲得了該工作,可以放鬆這些約束,直到找出破壞您的嘗試的東西。


EDIT 1:exec()一些常見的陷阱在this article提及。我不認爲這些適用,但你可能想要使用最後一個例子中的代碼來運行你的.exe在CMD.EXE以獲得體面的路徑分辨率,錯誤處理等。


編輯2:您的可執行文件名稱需要解釋爲長文件名。我不積極的API可以/將會處理這個。請嘗試給.EXE一個簡短的名字(僅用於測試),比如NEWPROG.EXE(名字中沒有第二個點),但首先請首先嚐試使用CMD.EXE。


編輯3:從閱讀評論對方的回答:是否有可能你的程序確實運行,並且本身返回2,因爲它無法找到文件的狀態?是否有某種方法來驗證程序的運行,可能是通過從您的Java程序運行的.CMD批處理腳本中調用它並將其寫入輸出重定向到文件?

+0

行程是絕對的並帶有反斜槓。忘了提到這一點。 :) – Philip 2010-05-20 15:03:35

+0

現在添加了實際的路徑和文件名。 – Philip 2010-05-20 15:09:26

+0

在Windows中,後退/前進斜槓無關緊要。 – BalusC 2010-05-21 13:57:10

0

沒有更多的細節,很難給出具體的答案。檢查您在c:\ test目錄下的權限以及您嘗試執行的目標文件的權限。

+0

我想添加更多細節,缺少什麼? 用實際路徑和文件名替換佔位符。 – Philip 2010-05-20 15:08:32

+0

exe是否依賴於dll?這些在同一個文件夾中嗎? – mdma 2010-05-20 15:11:04

+0

該exe是獨立的,或多或少。它由Launch4j生成。 – Philip 2010-05-20 15:14:27