2012-04-23 3 views
1

Мы используем Install4J для нашей текущей версии нашего программного обеспечения и бесшумно устанавливаем MySQL 5.1 во время установки.Как (тихо) удалить MySQL на 32 и 64 бит Windows

Для следующей версии нашего программного обеспечения, если это обновление, я хочу удалить 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 переменная. После этого шага, у меня есть 'Запуск исполняемого или пакетный файл' шаг со следующими параметрами:

  • Executable: msiexec.exe
  • Working Directory: $ {инсталлятор: sys.system32Dir}
  • Аргументы:/I {installer: mysqlUninstallKey}

Это будет (в 32-разрядной Windows XP) запустить установщик сервера MySQL, а затем пользователь должен выбрать «удалить» вручную.

В 64-разрядной версии Windows 7 отображается только диалоговое окно с указанием всех флагов командной строки и их объяснений, поэтому msiexec.exe запускается, но аргумент, который я передаю, не распознается.

Любая идея, что может быть неправильным? Или, может быть, я делаю это совершенно неправильно, и есть лучший способ?

Я использую Install4j 4.2.8.

+1

Чтобы удалить старую версию, используйте 'msiexec.exe/qn/x {целевой код продукта}'. –

ответ

2

Благодаря комментарию @ marcus-adams, я понял это. Вам нужно использовать '/ qn', '/ x' и '{installer: mysqlUninstallKey}' в качестве отдельных аргументов в действии install4j «Запустить исполняемый файл или пакетный файл». Если вы используете 1 аргумент с пробелами, он не работает. С этим он работает на 32-битных и 64-битных.

Смежные вопросы