2014-11-06 13 views
4

我創建了Maven NetBeans平臺應用程序,並通過運行「nbm build-installers」目標生成安裝程序。這會創建一個.exe,然後用戶可以運行它來自動安裝我的應用程序。 (在一個普通的NBPA中,這將是「Package as - > Installers」,兩者都有相同的問題)生成的安裝程序創建指向錯誤可執行文件的快捷方式

用戶運行安裝程序後,在用戶的桌面上放置一個快捷方式。但是,對於Windows 7和Windows 8 64位系統,快捷方式指向錯誤的二進制文件。它指向了32位版本。例如,如果我有一個名爲「SampleApp」的應用程序,它的快捷方式指向類似於「C:\ Program Files \ sampleapp \ sampleapp.exe」而不是「C:\ Program Files \ sampleapp \ sampleapp64.exe」 。這兩個二進制文件都存在於這個文件夾中。

由於應用程序會調用各種特定於體系結構的DLL(32位版本將使用32位dll,64位應該使用64位dll),所以此問題正在爲我們創建真正的問題。

安裝程序需要根據用戶的操作系統體系結構創建指向正確二進制文件的快捷方式。

我從https://netbeans.org/bugzilla/show_bug.cgi?id=246710採取的問題,因爲我有同樣的問題。

任何人都知道如何解決這個問題?謝謝

+1

你應該回答你的問題並接受它,而不是在標題中標記爲「已解決」。 – Riduidel 2015-12-03 16:32:14

回答

2

確實有一個錯誤:安裝程序將始終創建一個鏈接到sampleapp.exe而不是sampleapp64.exe。這並沒有人們所期望的那麼大。 exe文件實際上只是一個啓動JVM進程的小型啓動程序。如果所述JVM是64位,那麼無論啓動器.exe實際上是32位二進制文​​件,這就是您將要獲得的。所以大多數人不會在這個bug中看到問題。但是如果你使用外部DLL,你可能是對的,那麼它可能是一個問題,不知道。我會聽取您的意見並提出解決方案。

好吧,真正重要的是你可用的JVM,而不是操作系統本身。我們可以在這裏做一個相當安全的假設:安裝應用程序的JVM也將是最終將運行應用程序的JVM。這至少總是如此,如果你捆綁JRE,甚至在其他情況下這是一個安全的賭注。

爲了解決您的問題,您必須從NBI存根使用您自己的版本ConfigurationLogic.java,因爲這是問題所在。

在該文件中,你會在底部附近

... 
... 
    public static final String EXECUTABLE_WINDOWS = 
      BIN_SUBDIR 
      + ResourceUtils.getString(ConfigurationLogic.class, "CL.app.name") + ".exe"; // NOI18N 

這需要確定如下看到:

private static String get64BitSuffix() { 
     if (SystemUtils.isCurrentJava64Bit()) { 
      return "64"; 
     } else { 
      return ""; 
     } 
    } 


... 
... 
    public static final String EXECUTABLE_WINDOWS = 
     BIN_SUBDIR 
     + ResourceUtils.getString(ConfigurationLogic.class, "CL.app.name") + get64BitSuffix() + get64BitSuffix() + ".exe"; // NOI18N 

我們如何在一個Maven使用自己ConfigurationLogic.java問題基於項目:只是谷歌它。

相關問題