2012-01-19 165 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

相关问题