Установка пути к каталогу при запуске файла JAR из командной строки - PullRequest
0 голосов
/ 19 января 2012

У меня есть файл 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();

Оба возвращают один и тот же правильный путь, когда файл запускается независимо, и C:\Windows\System32 при запуске из внешнего процесса.Пожалуйста, предложите, что я должен сделать, чтобы решить эту проблему.

1 Ответ

2 голосов
/ 19 января 2012

Давайте посмотрим метод exec класса Runtime:

Это удобный метод.Вызов формы exec (команда) ведет себя точно так же, как и вызов exec (команда, ноль, ноль).

, а затем описание exec (команда, ноль, ноль):

Это удобный метод.Вызов формы exec (команда, envp, dir) ведет себя точно так же, как вызов exec (cmdarray, envp, dir)

, поэтому вызов exec (команда) приводит кВызов exec (cmdarray, envp, dir), ниже является частью описания exec (cmdarray, envp, dir):

Рабочий каталог нового подпроцесса определяется dir,Если dir равно нулю, подпроцесс наследует текущий рабочий каталог текущего процесса.

В вашем коде параметр dir равен нулю, поэтому подпроцесс наследует текущий рабочий каталог текущего процесса.В данном случае это рабочий каталог Evalute.exe

C: \ Windows \ System32

.

, если вы хотите получить такой жерезультат независимо от того, как выполняется файл JAR, вы должны явно указать рабочий каталог, просто используйте код ниже:

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

вместо:

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