防止 jfx 打包程序的辅助启动器在 Windows 中触发 UAC/提升的权限



我正在开发一个JavaFX应用程序,我希望它自动更新。我正在使用JavaFX Maven插件,并为每个操作系统构建一个本机包(JavaFX Maven插件使用javapackager):Linux,Windows和OSX。我正在使用最新的JDK 8u74,因为它具有"辅助启动器"功能,这应该可以在我的软件包中捆绑多个本机启动器。我在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中,他们似乎对操作系统进行了编程,以便任何带有"update"一词的.exe都将触发UAC。

所以解决方案是:将 appName 更改为其他内容...

最新更新