我正在开发一个JavaFX应用程序,希望它可以自动更新。我正在使用JavaFX Maven Plugin并为每个OS(Linux,Windows和OSX)构建一个本地包(JavaFX Maven插件使用javapackager)。我使用的是最新的JDK 8u74,因为它具有“辅助启动器”功能,因此应该可以在我的软件包中 bundle 多个 native 启动器。我在pom.xml中添加了两个启动器:
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.2.0</version>
<configuration>
<mainClass>MainApp</mainClass>
<appName>MainApp</appName>
<verbose>true</verbose>
<jfxMainAppJarName>application.jar</jfxMainAppJarName>
<secondaryLaunchers>
<launcher>
<appName>AnotherApp</appName>
<mainClass>AnotherApp</mainClass>
</launcher>
</secondaryLaunchers>
</configuration>
因此,在Windows上,用户安装此JavaFX应用后,路径下有两个启动器
\User\userName\AppData\Local\ourApp
,与相同的JVM bundle 在一起。我们将第一个启动器称为MainApp,将第二个称为AnotherApp。
现在的问题是:在Windows上,以某种方式,AnotherApp将需要UAC(管理员权限),而MainApp则不需要。
显然,我要求将应用程序安装在...\AppData\Local中是因为我不希望它触发提升的特权。我也在这里查看:http://mark.koli.ch/uac-prompt-from-java-createprocess-error740-the-requested-operation-requires-elevation,但是它不能解决问题。
所以我的问题是:当有两个启动器时,为什么辅助启动器需要提升的特权?如何避免这种情况?
最佳答案
终于弄清楚了这个有线的问题。
问题与appName有关。在我的代码中,我实际上是将<appName>Updater</appName>
用于第二个启动器。在Windows中,似乎他们已对操作系统进行了编程,以便任何带有单词“update”的.exe都将触发UAC。
所以解决方案是:将appName更改为其他名称...
关于java - 防止jfx打包程序的辅助启动程序在Windows中触发UAC/高权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35753309/