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

时间:2016-03-02 16:48:09

标签: java windows maven uac privileges

我正在开发一个我希望自动更新的JavaFX应用程序。我正在使用JavaFX Maven Plugin并为每个操作系统构建一个本机包(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应用程序后,路径下有两个启动器   的 \用户\用户名\应用程序数据\本地\ ourApp ,捆绑了相同的JVM。让我们调用第一个启动器MainApp和第二个启动器AnotherApp。

现在的问题是:在Windows上,在MainApp没有的情况下,AnotherApp会以某种方式需要UAC(管理员权限)。

显然,我要求将应用程序安装在... \ AppData \ Local中,因为我不希望它触发提升的权限。我也在这里查看:http://mark.koli.ch/uac-prompt-from-java-createprocess-error740-the-requested-operation-requires-elevation,但它并没有解决问题。

所以我的问题是:当有两个发射器时,为什么辅助发射器需要提升权限?我怎么能避免这个?

1 个答案:

答案 0 :(得分:0)

终于找到了这个有线问题。

问题在于appName。在我的代码中,我实际上是使用<appName>Updater</appName>作为我的第二个启动器。在Windows中,似乎他们对操作系统进行了编程,以便任何带有“更新”字样的.exe都会触发UAC。

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