【问题标题】:Run Jar file on startup?在启动时运行 Jar 文件?
【发布时间】:2014-01-07 03:54:23
【问题描述】:

我有一个 Java 应用程序,它位于系统托盘中,我将其编译为可执行的 jar 文件。我想在我的程序中添加选项以添加到系统启动项中。

由于我不知道有任何统一的方法可以为所有操作系统执行此操作,因此我认为我必须为我打算支持的每个操作系统编写代码来执行此操作,因此我从 Windows 开始。

当我尝试使用 the code available here 将其添加到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] 的注册表时,我发现在 Windows 7 和 8 下,除非我具有管理员权限(通过从提升的命令提示符运行),否则我对注册表的编辑不适用.

然后我花了一天的时间试图弄清楚如何让 Jar 以管理员权限重新启动,然后我放弃了那个 hacky 解决方法。

我想要完成的任务能否完成?如果可以,如何完成?

【问题讨论】:

  • 你看过Apache Commons Daemon吗?
  • @ElliottFrisch 我没有,但乍一看似乎需要在用户计算机上安装二进制软件。理想情况下,我想要一个可以完全包含在我的 jar 中的解决方案。
  • @MikeB 不知道我的搜索中没有出现那个。我发现许多其他类似的提到注册表但我没有听说他们在那里提到的“自动运行文件夹”。我会检查一下。
  • 您可能想要描述为什么您希望它为所有用户安装,否则您应该在HKEY_CURRENT_USER 下注册它,并至少为当前用户获取它。下一个问题是,当然,它需要海拔吗?如果是,则需要将其添加到 Windows 7 及更高版本的任务计划程序中

标签: java windows startup


【解决方案1】:

在大多数情况下,您实际上是希望添加在用户登录时自动启动 的功能,而不是在系统启动时添加。对于 Windows,如果您在以下位置添加注册表项:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

此位置在以普通用户身份运行时不会出现权限问题,并且在 Windows 下已经支持了很长时间(我认为这里是 Windows 95 时间框架),因此应该是跨所有系统的安全更改。

对于 Linux,假设操作系统遵循 Open Desktop AutoStart 规范,那么您需要在 $HOME/.config/autostart/ 中创建适当的 .desktop 文件,在这种情况下它应该在登录时自动启动。

对于 Mac OS X,您需要在 $HOME/Library/LaunchAgents 中创建启动代理 plist。 Daemons and services documentation 详细说明了如何构造这个文件。

【讨论】:

  • 这是完美的,涵盖了我正在寻找的所有系统。我可能会添加一些关于 Open Desktop AutoStart 的通知,以便我的用户可以知道它是否不起作用,但应该为我覆盖足够的系统。现在找一台 OS X 机器进行测试。
【解决方案2】:

绕过用户权限不是一个好主意。注册表项是首选方式。还要记住,jar 本身是不可执行的,它需要 jvm,所以你可能想要做的是使用一个包装器并注册它。

【讨论】:

  • 我知道,我正在创建的注册表项是“javaw -jar [jar 文件的位置]”。如果创建了条目(并且用户没有移动我警告过的文件),它就可以工作。但是通过双击默认启动 jar 文件实际上并没有编辑注册表。只有当我以管理员身份运行它时,编辑才会应用。我可以把它放在一个包装器中,但是如何解决权限问题?
  • 只是不要绕过权限,这不是一件好事。告知用户此类事情需要管理员权限,这是我的建议。
  • 我会,或者更确切地说,Windows UAC 会在我重新启动时,如果该解决方案已经成功,但要求用户从提升的命令提示符运行我的软件是不可接受的。 (jar文件没有“以管理员身份运行”功能)
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 2016-08-17
  • 2013-07-21
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多