【发布时间】:2016-10-23 21:00:58
【问题描述】:
我想在启动时在 Windows 下自动运行 Java 应用程序,但不依赖于特定的 Windows 或特殊的 JRE 版本。
通常,在 Windows 登录时运行程序的一个好方法是在
下添加一个注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
但是,当 Windows 尝试运行注册表的 RUN 部分中列出的程序时,似乎没有评估系统 PATH。
所以这两个条目都有效:
"C:\Program Files\Java\jdk1.8.0_111\bin\javaw" -jar c:\path\to\java.jar
"C:\ProgramData\Oracle\java\javapath\javaw" -jar c:\path\to\java.jar
但是这个没有出现:
javaw -jar c:\path\to\java.jar
现在,后者在手动输入控制台窗口时可以工作,因为存在所需的 PATH 并对其进行评估:
PATH=....;C:\ProgramData\Oracle\Java\javapath;....
现在,我想从自动安装程序中添加注册表项,我希望它形成“独立于 Windows 系统”(从 Vista 到 Win 10,而且不取决于版本安装了 JRE)。所以我不知道 JRE 的一般路径,因此我无法向注册表添加特定的 RUN 命令。
有谁知道如何将独立于系统的 JRE 调用正确添加到注册表的 RUN 部分?
我已经尝试过使用命令文件,例如“startup.cmd”,内容为java -jar file.jar,已向注册表添加了对该文件的调用,是的,找到了java,应用程序已启动,但是使用此方法时,我有一个烦人的黑色命令终端窗口在 Java 应用程序运行时始终保持打开状态。
谢谢, 汤博
【问题讨论】:
-
澄清一下:你的最后一句是说“如果我调用批处理文件,PATH 已解析,但如果我通过注册表运行命令调用 javaw.exe 则未解析”?跨度>
-
是的。显然,当直接从注册表调用 prg 时没有可用的 PATH 信息,但是当通过批处理或 cmd 文件的迂回调用时,PATH 确实存在于批处理或 cmd 文件中。