2016-06-23 3 views
1

Я пытаюсь перейти от InstallShield к Inno Setup. У меня есть все настройки, но я застрял в одном случае, когда пользователь может перейти от Inno Setup обратно к InstallShield. Мне нужно InstallShield, чтобы вывести из строя установку или, по крайней мере, предупредить пользователя сначала удалить версию Inno Setup вручную (в противном случае я получаю две версии, и все становится запутано).Остановить установку InstallShield при обнаружении Inno Setup

Возможно, я изменил существующие установщики InstallShield, так как они уже выпущены. Решение должно исходить от Inno Setup. Любые идеи, как это можно сделать? Я понимаю, что это может быть невозможно.

ответ

0

OK Я решил. (вид)

Существует простой трюк, который вы можете сделать, чтобы обмануть InstallShield, чтобы думать, что он уже установлен, даже если это не так.

Сначала вам нужно найти все записи в реестре с помощью UpgradeCode и ProductCode (это должно быть 3 записи для UC и 5 для ПК), которые обычно создаются с помощью InstallShield. Также обратите внимание, что оба GUIDS хранятся в реестре в обратном порядке (первые 8 символов возвращаются назад - остальное я не уверен, но это может быть googled).

Теперь вам нужно заставить InnoSetup воссоздать записи реестра. Когда InstallShield запускается, он ищет существующую версию в реестре, если находит ее, пытается удалить ее, используя копию исходного установщика. Путь к копии хранится в реестре по адресу

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ S-1-5-18 \ Products {обратный указатель кода продукта} \ InstallProperties]

"LocalPackage" = "C: \ Windows \ Installer \ [random string] .msi"

Если InstallShield не найдет этот файл, он потерпит неудачу. Вы также можете создать свой собственный файл MSI, который вызовет файл uninstall.exe из InnoSetup.

+1

Это ОЧЕНЬ ПЛОХАЯ вещь, которую нужно сделать, и приведет к поврежденной службе установщика Windows. Эти записи реестра принадлежат инсталлятору, и вы не должны манипулировать ими таким образом. –

0

Шаблон шаблона InstallShield автоматически авторами запрещает использование правила понижения в MSI. Предполагая, что ваш проект InnoSetup был создан с использованием того же UpgradeCode, что и проект InstallShield, это должно работать автоматически.

Если вы предоставили вашему новому проекту InnoSetup новый GUID UpgradeCode и создали правило унаследованного типа продукта, используя старый графический интерфейс в таблице Upgrade, действительно не так много возможностей InstallShield. Это характер установщиков ... после того, как он отправлен, он отправлен.

+0

Inno Setup не использует установщик Windows/MSI, поэтому любые GUID здесь неактуальны. –

+0

А в таком случае все потеряно. –

+0

Да InnoSetup создает .exe и не использует код обновления – Safiron

0

Я не думаю, что это можно сделать. Inno Setup не использует установщик Windows, поэтому InstallShield даже не знает, что ваш продукт уже установлен. И инсталлятор Inno Setup не может знать, что инсталлятор InstallShield запускается.

Лучшее, что вы можете сделать, это установить установщика Inno Setup, чтобы удалить установку InstallShield и установить себя в другую папку. Поэтому, когда вы переустанавливаете установку InstallShield, она по крайней мере не будет конфликтовать с установкой Inno Setup. При необходимости пользователь сможет правильно удалить новую установку Inno Setup.

+0

Сумасшедшая мысль ... имеет поддельную MSI, которая не отображается в «Установка и удаление программ», в которой установлен UpgradeCode старого установщика InstallShield. Затем попробуйте интуитивно настроить это тихо и просто удалите его, чтобы быть блокирующим маркером для старого MSI. Это должно сработать.Тем не менее, это не то, что я бы сделал .... –

+0

1) «Uninstall silent», значит, вы имеете в виду «удалить программу установки Inno Setup»? 2) Итак, поддельный MSI будет выглядеть как новая версия старой MSI? –

+0

Да, это идея. Вид нового поворота в идее трояна MSI ... –