Установщик Java. Как установить системный путь Windows? - PullRequest
1 голос
/ 30 июня 2011

У меня есть установщик Java, который развертывает двоичный файл в "ProgramFiles" \ myapp.Я хотел бы сделать его доступным из командной строки.

В Linux бинарный файл развернут в / usr / local / bin /.Под Mac я планирую развернуть бинарный файл в / usr / bin /.

Как сделать бинарный файл с одной командной строкой доступным в Windows?Очевидно, я мог бы отправить двоичный файл в «WindowsDir» \ System32 ... Хотя это не было бы чистым способом сделать это.

Я думаю, что обновление пользовательской переменной окружения PATH - хороший вариант.Как бы я сделал, чтобы это сохранялось после перезагрузки?

edit: я не хочу слышать, что это не может быть сделано, как уже было сказано в двух ответах.Это неправильный ответ, и его следует отклонить ....

C:\>echo %PATH%
C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\WINDOWS\system32
C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\QuickTime\QTSystem\

Очевидно, что Apple это выяснила, потому что QucikTime на моем пути.

Ответы [ 4 ]

2 голосов
/ 30 июня 2011

Попробуйте это:

set <environment variable>=<value>
1 голос
/ 05 июля 2011

Вот так я и поступил.Я добавляю программные файлы \ Heimdall в реестр ...

             String GetReg[]={"reg", "query", "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", "/v", "Path"}; 
             String RegVal="";
             try {
               RegVal =Shell.sendShellCommand(GetReg).split("   ")[2].replace("\n", ""); 
             } catch (ArrayIndexOutOfBoundsException e){
               RegVal = Shell.sendShellCommand(GetReg).split("    ")[2].replace("\n", ""); 
             }
             if ((RegVal.contains("C:\\")) || (RegVal.contains(";%SystemRoot%"))){
                 String RegPATH=RegVal+ProgramFiles+"\\Heimdall\\;";
                 Log.level3(RegVal);
                 Log.level2("Attempting to insert" + RegPATH + "into Registry");
                 String RegCommand[]={"reg", "add","HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", "/v", "Path" ,"/t" ,"REG_EXPAND_SZ",  "/d", "\""+RegPATH+"\"" , "/f"};
                 if (! RegVal.contains(ProgramFiles+"\\Heimdall\\")){
                     Shell.sendShellCommand(RegCommand);
                 }

             }
1 голос
/ 30 июня 2011

Я не верю, что Java действительно может изменять переменные окружения. Смотрите этот пост об этом: Как установить переменные окружения из Java?

Не чистый ответ - использовать ProcessBuilder . Как указывал OP, вызов команды windows set, такой как set path=<your path>;%path%, только изменяет переменную в среде вашего процесса.

Лучший способ - изменить реестр с помощью команды reg. На этой странице Википедии указан правильный ключ реестра: http://en.wikipedia.org/wiki/Environment_variable

В реестре Windows это делается путем изменения значений в HKCU \ Environment (для пользовательских переменных) и HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment (для системных переменных).

Кроме того, если вы не ориентируетесь на Windows XP и более ранние версии, вы можете попробовать команду setx, добавленную в Windows Vista: http://technet.microsoft.com/en-us/library/cc755104(WS.10).aspx

0 голосов
/ 30 июня 2011

Переменная пути, как и все остальное в windows, управляется в реестре. Ссылка на этот пост для соответствующих ключей. Программное добавление каталога в переменную среды Windows PATH . Вам нужно будет написать нативную функцию. Как всегда обратите внимание, это ограничит независимость платформы вашего приложения. Если это не ваша чашка чая, существует основанный на JNI редактор реестра java под названием jregistrykey

...