如何(静默地)在32位和64位Windows上卸载MySQL

时间:2012-04-23 14:46:58

标签: mysql uninstall install4j

我们正在使用Install4J作为我们当前版本的软件,并在安装过程中以静默方式安装MySQL 5.1。

对于我们软件的下一个版本,如果是升级版,我想删除MySQL 5.1并安装5.5。理想情况下,卸载应该是静默的,但不是硬性要求。我设法让它在32位Windows XP上运行,但在64位Windows 7上却没有。这是我到目前为止所做的:

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;
 }
}

这会将MySQL Server 5.1的产品代码放在mysqlUninstallKey变量中。完成此步骤后,我有一个'运行可执行文件或批处理文件'步骤使用以下设置:

  • 可执行文件:msiexec.exe
  • 工作目录:$ {installer:sys.system32Dir}
  • 参数:/ I {installer:mysqlUninstallKey}

这将(在32位Windows XP上)运行MySQL服务器的安装程序,然后用户必须选择“删除”#39;手动

在64位Windows 7上,它只显示一个对话框,显示所有命令行标志及其说明,因此msiexec.exe正在启动,但我传入的参数无法识别。

知道可能出错的是什么?或者也许我这样做完全错了,有更好的方法吗?

我使用的是Install4j 4.2.8。

1 个答案:

答案 0 :(得分:2)

感谢@ marcus-adams的评论,我明白了。您需要在install4j的“运行可执行文件或批处理文件”操作中使用'/ qn','/ x'和'{installer:mysqlUninstallKey}'作为单独的参数。如果您使用带有空格的1个参数,则它不起作用。有了它,它可以在32位和64位上运行。