从命令行运行jar文件时设置目录路径

时间:2012-01-19 01:04:36

标签: java jar filepath executable-jar

我有一个jar文件,其中我有一个函数,它检测其绝对路径(此文件的启动位置)。它工作正常。

但是现在,为了获得管理员权限,我从另一个jar文件启动此文件,同时使用elevation binary executable之类的内容:

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

请注意,Elevate.exe和jar文件位于同一目录中,但我尝试同时给出jar文件名和绝对路径,但在两种方式下,文件都会启动,它有admin权利和一切正常,但事实上,现在相同的方法给出了错误的当前目录路径。

这次我得到:C:\Windows\System32我尝试了很多东西,但每次使用Runtime.getRuntime().exec("cmd \\c ");从另一个jar文件使用上述方法启动此jar时,都无法正确检测当前目录路径。为什么会如此,如何在这种情况下找到正确的路径?

编辑: 我尝试使用以下方法获取正确的目录名称:

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

独立启动文件时返回相同的正确路径,从外部进程启动时返回C:\Windows\System32。请建议我该怎么做才能解决这个问题。

1 个答案:

答案 0 :(得分:2)

让我们看一下Runtime类的exec方法:

  

这是一种方便的方法。调用exec(command)形式的行为与调用exec(command,null,null)完全相同。

然后是exec(command,null,null)的描述:

  

这是一种方便的方法。调用exec(command,envp,dir)的形式与调用exec(cmdarray,envp,dir)的行为完全相同

所以exec(命令)的调用会导致调用exec(cmdarray,envp,dir),下面是exec(cmdarray,envp,dir)描述的一部分:

  

新子进程的工作目录由dir指定。如果   dir为null,子进程继承当前的工作目录   当前的过程。

在您的代码中,参数dir为null,因此子进程继承当前进程的当前工作目录,在这种情况下,是Evalute.exe的工作目录

  

C:\ Windows \ System32下

如果你想获得与jar文件执行方式无关的相同结果,你必须明确指定工作目录,只需使用下面的代码:

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

而不是:

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