我有一个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
。请建议我该怎么做才能解决这个问题。
答案 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 ");