情况
我有一个在多个平台上运行的(基于 Eclipse RCP 的)Java 应用程序。我在除 Windows 之外的所有平台上都解决了这个问题。
安装程序:我的应用程序安装程序始终在提升模式下运行,因此它可以将应用程序安装到C:\Program files\MyProduct
. 从用户的角度来看,这意味着安装程序只能由管理员执行,并且 UAC 将要求确认。这工作正常。
正常使用:普通用户可以启动该应用程序。不需要管理员权限。这工作正常。
自动更新:自动更新功能也写入C:\Program Files\MyProduct
,因此也需要管理员权限。这就是为什么应用程序虽然也可以作为普通应用程序启动,但必须作为提升的进程运行才能自动更新。从用户的角度来看,自动更新应该是“以管理员身份运行”。
问题
我想要运行时检查以查看我的Java 进程是否处于提升模式(即查看它是否为“以管理员身份运行”。
请注意,它可能是仅限 Windows 的解决方案。使用 Java 反射 API,我可以在运行时检查特定于 Windows 和/或实现的类。
研究
我只在 StackOverflow 上发现了这个问题: Detect if Java application was run as a Windows admin
但是,该解决方案会返回活动用户是否是管理员组的成员。用户可能仍然让我的应用程序以非提升模式启动。我已经验证了这一点。
笔记
我知道当他或她没有管理员权限时,Eclipse RCP 应用程序会自动在用户目录中安装更新,但我想阻止这种情况。
我想允许用户特定的配置(工作正常),但允许用户特定的更新会在卸载后留下太多的混乱。