1

現在のバージョンのソフトウェアにはInstall4Jを使用しており、インストール中にMySQL5.1をサイレントインストールします。

私たちのソフトウェアの次のバージョンでは、それがアップグレードである場合、MySQL 5.1を削除し、5.5をインストールしたいと思います。理想的には、アンインストールはサイレントに実行する必要がありますが、難しい要件ではありません。私はそれを32ビットのWindowsXPで動作させることができましたが、64ビットのWindows7では動作しませんでした。これは私がこれまでに持っているものです。

String[] uninstallKeys = WinRegistry.getSubKeyNames(RegistryRoot.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
for( String uninstallKey : uninstallKeys )
{
  Object displayVersion = WinRegistry.getValue(RegistryRoot.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstallKey, "DisplayVersion" );
  Object displayName = WinRegistry.getValue(RegistryRoot.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstallKey, "DisplayName" );
  if( displayVersion != null && displayVersion.toString().equals(installedMysqlVersion)
                  && displayName != null && displayName.toString().startsWith("MySQL Server") )
  {
    Util.logInfo( null, "Found match, uninstall key: " + uninstallKey );
    context.setVariable( "mysqlUninstallKey", uninstallKey );
    break;
 }
}

これにより、MySQLServer5.1の製品コードがmysqlUninstallKey変数に追加されます。このステップの後、次の設定で「実行可能ファイルまたはバッチファイルを実行する」ステップがあります。

  • 実行可能ファイル:msiexec.exe
  • 作業ディレクトリ:$ {installer:sys.system32Dir}
  • 引数:/ I {installer:mysqlUninstallKey}

これにより(32ビットWindows XPでは)MySQLサーバーのインストーラーが実行され、ユーザーは手動で「削除」を選択する必要があります。

64ビットのWindows7では、すべてのコマンドラインフラグとその説明を示すダイアログが表示されるだけなので、msiexec.exeが開始されていますが、渡した引数が認識されません。

何が間違っているのか考えてみませんか?または多分私はこれを完全に間違ってやっていて、より良い方法がありますか?

Install4j4.2.8を使用しています。

4

1 に答える 1

2

@ marcus-adamsのコメントのおかげで、私はそれを理解しました。install4jの「実行可能ファイルまたはバッチファイルの実行」アクションでは、「/ qn」、「/ x」、および「{installer:mysqlUninstallKey}」を個別の引数として使用する必要があります。スペースを含む1つの引数を使用すると、機能しません。これにより、32ビットと64ビットで動作します。

于 2012-04-24T07:16:07.963 に答える