2016-03-02 23 views
3

我正在研究一个我希望它自动更新的JavaFX应用程序。我正在使用JavaFX Maven Plugin并为每个操作系统构建本地包(JavaFX Maven插件使用javapackager):Linux,Windows和OSX。我使用最新的JDK 8u74,因为它具有“辅助发射器”功能,这应该可以在我的包中捆绑多个本地启动器。我加在pom.xml两个发射具有:防止jfx packager的辅助启动器在Windows中触发UAC /提升的特权

 <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后,有下路 \用户\用户名\ AppData的\本地\ ourApp 2次发射与相同的JVM捆绑在一起,即 。我们打电话给第一个启动器MainApp和第二个AnotherApp。

现在的问题是:在Windows上,AnotherApp将需要UAC(管理员权限),而MainApp则不需要。

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

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

+0

这是一个非常有趣的益智和挑战性的问题,如果你得到一个答案,也请告诉我。 –

回答

0

终于想出了这个有线问题。

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

因此,解决办法是:改变APPNAME别的东西......

相关问题