2012-01-19 222 views
0

我有一個jar文件,其中有檢測其絕對路徑(啓動此文件的位置的當前目錄)的函數。它工作正常。從命令行運行jar文件時設置目錄路徑

但現在,爲了獲得管理權限,我啓動從另一個jar文件這個文件,而使用elevation binary executable類似:

Elevate.exe javaw.exe -jar path-to-my-jar-file 

在這裏,請注意,Elevate.exe和JAR文件在同一目錄,但我試着給出只是jar文件名以及絕對路徑,但在兩種方式中,文件啓動,它具有管理權限,一切正常,除了現在相同的方法給出錯誤的當前目錄路徑的事實。

這次我得到:C:\Windows\System32我試過很多東西,但是每當我用另一個jar文件使用上述方法從Runtime.getRuntime().exec("cmd \\c ");啓動這個jar時,當前目錄路徑檢測不到。爲何如此,在這種情況下如何找出正確的路徑?

編輯: 我試圖讓使用正確的目錄名稱:

String dir = System.getProperty("user.dir") && 
String dir = new File (".").getAbsolutePath().toString(); 

兩個返回時,從外部進程啓動時的文件是獨立啓動,C:\Windows\System32相同的正確路徑。請建議我該如何解決這個問題。

回答

2

讓我們看看Runtime類的exec方法:

這是一個方便的方法。表單exec(command)的調用的行爲與調用exec(command,null,null)完全相同。

然後EXEC的描述(命令,NULL,NULL):

這是一個方便的方法。形式EXEC(命令,envp,DIR)的調用行爲完全相同的方式調用EXEC(cmdarray,envp,DIR)

所以EXEC的調用(命令)導致EXEC的調用(cmdarray,envp,DIR),下面是EXEC的描述(cmdarray,envp,DIR)的一部分:

新子進程的工作目錄由目錄指定。如果 dir爲空,則子進程繼承當前進程的當前工作目錄 。

在你的代碼參數dir是空的,所以子進程會繼承當前進程的當前工作目錄,在這種情況下,工作Evalute.exe

的C目錄:\ Windows下\ System32

,如果你想要得到的jar文件是如何執行相同的結果regardingless,你必須明確指定的工作目錄,只需使用下面的代碼:

Runtime.getRuntime().exec("cmd \\c ", null, new File("your working dir")); 

代替:

Runtime.getRuntime().exec("cmd \\c "); 
+0

非常感謝這樣寶貴的答案。其實Elevate.exe和jar文件駐留在同一個目錄中。在運行Elevate.exe之前,我傳遞命令「cd dir」,以便dos提示符更改爲特定的目錄。奇怪的是,在我的桌面上,它在筆記本電腦上工作,但它並不在win7上。我會在前夕測試你的解決方案,因爲我沒有其他機器在這裏,但我確定它會工作,謝謝。 – Johnydep

相關問題