防止 jfx packager 的辅助启动器在 Windows 中触发 UAC/elevated 权限
Preventing jfx packager's secondary launcher from triggering UAC/elevated privilege in Windows
我正在开发一个 JavaFX 应用程序,我希望它能自动更新。我正在使用 JavaFX Maven Plugin 并为每个 OS 构建本机包(JavaFX Maven 插件使用 javapackager):Linux、Windows 和 OSX。我正在使用最新的 JDK 8u74,因为它具有 "secondary launchers" 功能,这应该可以在我的包中捆绑多个本机启动器。我在 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 捆绑在一起。我们将第一个启动器称为 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 中,他们似乎对 OS 进行了编程,以便任何带有单词 "update" 的 .exe 都将触发 UAC。
所以解决方案是:将 appName 更改为其他名称...
我正在开发一个 JavaFX 应用程序,我希望它能自动更新。我正在使用 JavaFX Maven Plugin 并为每个 OS 构建本机包(JavaFX Maven 插件使用 javapackager):Linux、Windows 和 OSX。我正在使用最新的 JDK 8u74,因为它具有 "secondary launchers" 功能,这应该可以在我的包中捆绑多个本机启动器。我在 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 捆绑在一起。我们将第一个启动器称为 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 中,他们似乎对 OS 进行了编程,以便任何带有单词 "update" 的 .exe 都将触发 UAC。
所以解决方案是:将 appName 更改为其他名称...