Продукт не удаляется из Windows при удалении предыдущего продукта во время его установки
У меня есть установщик MSI Installshield Basic, который устанавливает новую версию нашего продукта. Если пользователь все еще пользуется старой версией (установленной установщиком Installscript), установщик выполнит строку удаления старого продукта, прежде чем приступить к установке нового продукта.
Это вызывает некоторые проблемы, когда пользователь собирается удалить новую версию нашего продукта. При добавлении / удалении программ и запуске деинсталлятора деинсталлятор запускает и удаляет файлы, однако при обновлении списка добавления / удаления продукт, по-видимому, еще не установлен. Файлы были удалены, но в реестре есть остатки продукта.
Единственный способ эффективно удалить продукт - использовать стороннюю программу очистки реестра (и, возможно, скрипт, построенный на этом). Странно то, что если пользователь удаляет старый продукт вручную перед установкой нового, удаление нового продукта будет работать нормально. Кроме того, установка нового продукта без того, чтобы старый продукт никогда не находился на компьютере, также приведет к чистому удалению.
2 продукта имеют разные коды продуктов. Есть идеи, что может быть причиной этого? Спасибо!
3 ответа
Если в окне "Установка и удаление программ" что-либо отображается как не удаляемое, раздел реестра, находящийся здесь, остается на месте:
HTLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}
или для 64-битных систем:
HKLM/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall/{ProductGUID or Name}
В части удаления нового пакета убедитесь, что они:
- Не иметь тот же идентификатор продукта (вы уже заявили об этом, но убедитесь;))
- При необходимости добавьте строку внутри кода, чтобы удалить оставшиеся записи реестра.
Вы можете вложить файлы в Installshield и Wise package studio. Вы можете написать файл.bat, поместить его во временный каталог, закодировать так, чтобы при запуске он удалял последний бит, оставшийся после ex. ключи реестра.
ИЛИ ЖЕ
Создайте виртуальную машину, установите новый продукт, запишите его с помощью Wise и разверните его таким образом.
Не видя код внутри вашего Installshield, я понятия не имею, какие подробные объяснения я могу дать....
GL!!!
Я предполагаю, что вы не правильно установили механизм обновления в вашем новом установщике. Возможно, вы выбрали "Установить настройки, затем удалить ненужные файлы" в пункте меню "Обновление". Если это так, измените его на "Сначала удалить старые настройки" и убедитесь, что вы используете правильный код UpgradeCode. Или просто создайте новый элемент обновления специально для предыдущей версии программы установки, удалив его перед установкой.
Вы, вероятно, вызываете старую строку удаления продукта в середине установки нового продукта. Сценарий установки MSI регистрирует все изменения, а также включает в себя "удаление старых" изменений. При удалении нового продукта эти изменения отменяются, поэтому MSI восстанавливает записи реестра, которые существовали до его установки. Эти записи включают старые записи удаления продукта.
Я мало знаю о режиме InstallShield Basic MSI. Если у него есть возможность изменить последовательность установки или установить, когда выполняются ваши действия, вы должны убедиться, что удаление старого продукта происходит между стандартными действиями InstallValidate и InstallInitialize. Если InstallShield не дает вам такого контроля, вам, вероятно, придется попросить пользователей удалить старую версию вручную.
См. Эту статью о размещении действий удаления: http://jpassing.com/2007/06/16/where-to-place-removeexistingproducts-in-a-major-msi-upgrade/