我有一个Java应用程序,它存在于我编译为可执行jar文件的系统托盘中。我想在我的程序中添加选项以添加到系统启动项。
由于我不知道为所有操作系统做任何统一的方法,我认为我必须为每个我打算支持的代码编写代码,所以我从Windows开始。
当我尝试使用the code available here将其添加到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
的注册表时,我发现在Windows 7和8下,除非我具有管理员权限(通过从提升的命令提示符运行),我编辑了注册表不适用。
然后我花了一天的时间试图弄清楚如何让Jar重新启动自己的管理员权限,然后我就放弃了这个hacky解决方法。
我正在努力实现的任务是否可以完成,如果是,如何完成?
答案 0 :(得分:3)
在大多数情况下,您实际上希望添加自动启动用户登录的功能,而不是系统启动。对于Windows,如果在以下位置添加注册表项:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
当以普通用户身份运行时,此位置不会受到权限问题的影响,并且在Windows下已经支持了很长时间(我在这里考虑Windows 95时间框架),因此应该对所有系统进行安全更改。
对于Linux,假设操作系统遵循Open Desktop AutoStart规范,那么您需要在.desktop
中创建相应的$HOME/.config/autostart/
文件,并且在这种情况下它应该在登录时自动启动。
对于Mac OS X,您需要在$HOME/Library/LaunchAgents
中创建启动代理程序plist。 Daemons and services documentation详细说明了如何构建此文件。
答案 1 :(得分:0)
解决用户权限并不是一个好主意。注册表项是首选方式。还要记住,jar本身不是可执行的,它需要jvm,所以你可能要做的就是使用包装器并注册它。