InstallScript - перезаписать деинсталлятор по умолчанию?

Наша компания использует Flexera InstallShield 2012 (старый, я знаю), и в настоящее время я создаю проект InstallScript. Все работает нормально, скрипт делает именно то, что я хочу.

Тем не менее, я сейчас нахожусь в тупике. InstallScript имеет встроенную функцию OnUninstall, которая вызывается при запуске программы установки с флагом -uninstall. Я написал собственный сценарий удаления, чтобы удалить все, что я устанавливаю во время установки.

Но очевидно InstallScript (или установщик Windows) создает другую программу удаления, когда вы переходите к Programs and Functions -> Uninstall в Панели управления Windows.

Есть ли способ манипулировать этим «деинсталлятором по умолчанию» с помощью InstallScript?

Если вам нужна дополнительная информация, прокомментируйте, и я обновлю этот пост.

Спасибо!


person user3829915    schedule 04.06.2018    source источник
comment
Не могли бы вы сказать, какую проблему пытаетесь решить? По-видимому, вы решили, что у вас есть решение (изменить программу удаления по умолчанию?), Но с какой проблемой вы имеете дело? Обратите внимание, что фактического деинсталлятора по умолчанию нет (если вы не хотите его сделать?), Потому что Windows просто вызывает API-интерфейсы, чтобы настроить отсутствие продукта, а не отдельную программу.   -  person PhilDW    schedule 05.06.2018
comment
@PhilDW Я реализовал специальную функцию OnUninstall, но она не вызывается, когда я удаляю свою программу со сборкой на панели «Программы и приложения Windows».   -  person user3829915    schedule 05.06.2018


Ответы (2)


Я вижу два варианта, которые вы можете попробовать ...

  1. Как вы правильно заметили, OnUninstall вызывается при запуске установки с параметром -uninst. Я подозреваю, что этот параметр отсутствует в записи реестра Windows. Пожалуйста, взгляните на ...

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{your_product_id}\UninstallString
    

    Ключ должен иметь строку для запуска установки в режиме удаления с параметром -uninst, чтобы программа установки ударила обработчик OnUninstall. Если он не установлен, вам может потребоваться добавить его вручную во время первоначальной регистрации вашего продукта.

  2. Вы можете использовать OnEnd обработчик событий, который предназначен для очистки в конце установки и будет работать постоянно. Внутри этого обработчика событий вы можете создать специальный скрипт для удаления вашего продукта. Код может выглядеть так ...

    function OnEnd()
        // local variables
    begin
        if (!MAINTENANCE) then
            // initial setup; you may fix the Windows uninstall registry here (see point #1)
        else
            if ( nMaintTypeGlobal = REMOVEALL ) then
                // product removal
            endif;
        endif;
    end;
    
person Slava Ivanov    schedule 04.06.2018
comment
Я попробую, когда вернусь в офис (четверг). Спасибо! - person user3829915; 05.06.2018

Если это Installscript MSI проект, то он имеет собственное Windows Installer деинсталляцию, неявно включенное в сам MSI.

Теоретически, в зависимости от того, как вы что-то сделали, не должно быть необходимости самостоятельно реализовывать настраиваемую логику удаления - если только вы не делаете что-то очень необычное.

Все файлы и записи реестра, добавленные с компонентами MSI, должны быть удалены должным образом, если только другие файлы MSI не зарегистрированы для использования или вы не установили компонент как постоянный или <сильный > предоставлен доступ к устаревшему компоненту установщика, который обновляет и учитывает счетчик использования здесь:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
  • HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\SharedDLLs

(это означает, что будет соблюдаться подсчет ссылок в старом стиле из устаревших установщиков - ресурс не удаляется, если устаревший установщик имеет файл, зарегистрированный для использования).

Что ты делаешь в своем Uninstall event handler?

person Stein Åsmul    schedule 04.06.2018
comment
Отрицательно, это проект InstallScript, а не проект InstallScript MSI. - person user3829915; 05.06.2018