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

Java 从命令行运行jar文件时设置目录路径,java,jar,filepath,executable-jar,Java,Jar,Filepath,Executable Jar,我有一个jar文件,其中有一个函数可以检测它的绝对路径(启动这个文件的当前目录)。它很好用 但是现在,为了获得管理员权限,我从另一个jar文件启动了这个文件,同时使用了如下内容: Elevate.exe javaw.exe -jar path-to-my-jar-file 在这里,请注意,Elevate.exe和jar文件在同一个目录中,但是我尝试只给出jar文件名和绝对路径,但在这两种方式中,文件都启动,它具有管理权限,一切正常,只是现在相同的方法给出了错误的当前目录路径 这次我得到了:

我有一个jar文件,其中有一个函数可以检测它的绝对路径(启动这个文件的当前目录)。它很好用

但是现在,为了获得管理员权限,我从另一个jar文件启动了这个文件,同时使用了如下内容:

Elevate.exe javaw.exe -jar path-to-my-jar-file  
在这里,请注意,
Elevate.exe
和jar文件在同一个目录中,但是我尝试只给出jar文件名和绝对路径,但在这两种方式中,文件都启动,它具有管理权限,一切正常,只是现在相同的方法给出了错误的当前目录路径

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

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

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

当独立启动文件时,两者返回相同的正确路径;当从外部进程启动文件时,两者返回相同的正确路径。请建议如何解决此问题。

让我们看看类运行时的exec方法:

这是一种方便的方法。表单exec(命令)的调用与调用exec(命令,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 ");

非常感谢你这么有价值的回答。实际上,Elevate.exe和jar文件位于同一目录中。同样在运行Elevate.exe之前,我传递命令“cd dir”,以便dos提示更改该特定目录。奇怪的是,在我的台式机上,它可以工作,而在笔记本电脑上,它不能同时在win7上工作。我会在前夜测试你的解决方案,因为我这里没有其他机器,但我相信它会工作的,谢谢。