現在のバージョンのソフトウェアには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を使用しています。