我有一个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在我的道路上。
答案 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注册表编辑器