5

IzPackを使用してインストーラーを作成するアプリケーションがあります。インストーラーは現在の状態で正常に動作していますが、ソフトウェアの既存のバージョンがインストールされているかどうかを確認できる機能を追加する必要があります。

IzPack はCheckedHelloPanel、Windows レジストリに依存しているように見えるため、残念ながら Windows でのみ機能します。

既存のインストールを検出できるように IzPack を構成する方法はありますか?

存在するかどうかを検出し、ユーザーに通知するメッセージを表示できるようにする必要があります...既存のインストールのアンインストーラーをトリガーするオプションをユーザーに提供する方法のボーナスポイント。


  • ソフトウェアは新しいインストーラーを使用してのみインストールされると仮定します
  • IzPack のみ: 現在変更できないため、代替案を提案しないでください。
  • の使用を提案する場合<validator>は、検証クラスのコード サンプルを含めてください。これについては検討しましたが、どこから始めればよいかわかりません
4

2 に答える 2

2

これを書いたのは、アプリケーションを jboss インストールの上にインストールできるようにするためです。

public class JBossChecker {

 private static boolean tempJBossEnv;
 private static boolean tempJBossDirectoryExists;

 static {
  String s = System.getenv("JBOSS_HOME");
  tempJBossEnv= (s!=null);

  if( tempJBossEnv) {
   File f = new File(s);
   tempJBossDirectoryExists= ( f.exists() && f.isDirectory());
  }
  hasJBossEnv =tempJBossEnv;
  hasJBossDir = tempJBossDirectoryExists;
 }

 public static boolean hasJBossDir;
 public static boolean hasJBossEnv;

 public static void main(String[] args){
  System.out.println("Jboss environment "+hasJBossEnv);
  System.out.println("Jboss directory "+hasJBossDir);

 }
}

次に、インストーラーには次のようなセクションがあります

<conditions>
     <condition type="java" id="jbossEnv">
             <java> 
                 <class>au.com.codarra.ela.installer.JBossChecker</class
                 <field>hasJBossEnv</field>
             </java>
             <returnvalue type="boolean">true</returnvalue>
 </condition> 

 <condition type="java" id="jbossDir">
             <java>
                 <class>au.com.codarra.ela.installer.JBossChecker</class>
                 <field>hasJBossDir</field>
             </java>
             <returnvalue type="boolean">true</returnvalue>
 </condition> 

</conditions>

<installerrequirements>
 <installerrequirement condition="jbossEnv" message="Your system does not have the environment variable JBOSS_HOME set. Cannot update your system. Is XXXX installed on this system?" />
 <installerrequirement condition="jbossDir" message="Your system does not have a directory at the location in the environement variable JBOSS_HOME . Cannot update your system. Is XXXX installed on this system?" />
</installerrequirements>

<dynamicvariables>
 <variable name="INSTALL_PATH" value="${ENV[JBOSS_HOME]}"/>
</dynamicvariables>
<jar src="c:\dev\xxxx\build\installer.jar" />

最後のビットは、izpack がそれをインストーラー jar に確実に追加するようにします。

于 2010-01-12T03:28:43.463 に答える
0

Windowsだけがレジストリを持っているので、それはWindowsでのみ機能します。ただし、Linuxアプリでは、従来、カスタマイズされた統合された場所はありません。たとえば、実行スクリプトはbinフォルダーに、バイナリは/ optに、ドキュメントは/varに配置されます。ユーザーが選択して含む単一の「your-app」ディレクトリがあるという考えアプリケーションに関連するものはすべてWindowsの概念です。

とにかく、Linuxでこれを解決する方法は、ユーザーが定義していない場所にアプリのさまざまな部分をインストールすることです。そうすれば、アプリがすでにインストールされている場合にアプリがどこにあるかを正確に知ることができます。

于 2009-12-17T20:30:28.543 に答える