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

标签 java windows maven uac privileges

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

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

关于java - 防止 jfx packager 的辅助启动器在 Windows 中触发 UAC/提升权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753309/

相关文章:

java - 如果存在则使用值否则使用默认值 MySQL

mysql - 在一段时间间隔后从 shell 脚本调用 MySQL 查询

windows - 为什么有时 .data 部分的虚拟大小大于原始大小?

带有 "expressions"的 Java 类型提升

java - Intellij 项目某些文件在编译时未更新

c++ - 查询 D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY 的 WMI

java - Spring Boot 仪表板不会在 VSCode 上显示应用程序

java - mvn tomcat7 :run command thrown SEVERE: A child container failed during start

maven - 有没有办法在 maven pom 中追踪属性的来源?

java - teplated类内的内部类对象的数组