Java安装程序。如何设置Windows系统路径?

时间:2011-06-30 00:30:53

标签: java windows variables path system

我有一个Java安装程序,它将二进制文件部署到“ProgramFiles”\ myapp。我想从命令行访问它。

在Linux下,二进制文件部署到/ usr / local / bin /。在Mac下,我计划将二进制文件部署到/ usr / bin /。

如何在Windows下访问单个命令行二进制文件?显然我可以将二进制文件发送到“WindowsDir”\ System32 ......但这并不是一个干净的方法。

我认为更新用户PATH环境变量是一个不错的选择。重启后我怎么能坚持下去呢?

编辑: 我不想听到它无法完成,正如迄今为止在两个答案中所说的那样。这是一个错误的答案,应该被拒绝......

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 个答案:

答案 0 :(得分:2)

试试这个:

set <environment variable>=<value>

答案 1 :(得分:1)

我不相信java实际上可以修改环境变量。请参阅此帖子:How do I set environment variables from Java?

不干净的答案是使用ProcessBuilder。 正如OP指出的那样,调用像这个set path=<your path>;%path%这样的windows set命令只会修改进程环境中的变量。

更好的方法是使用reg命令修改注册表。此维基百科页面中列出了正确的注册表项:http://en.wikipedia.org/wiki/Environment_variable

  

通过Windows注册表更改HKCU \ Environment(针对用户特定变量)和HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment(针对系统变量)下的值。

此外,如果您不是针对Windows XP及更早版本,则可以尝试在Windows Vista中添加的setx命令:http://technet.microsoft.com/en-us/library/cc755104(WS.10).aspx

答案 2 :(得分:1)

这就是我的方式。我正在将程序文件\ 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);
                 }

             }

答案 3 :(得分:0)

路径变量与Windows中的其他内容一样,在注册表中进行管理。请参考此帖子以获取相应的密钥。 Programmatically adding a directory to Windows PATH environment variable。您需要编写本机函数。一如既往地注意,这将限制应用程序的平台独立性。如果这不是你的茶,那么存在一个名为jregistrykey

的基于JNI的java注册表编辑器