Класс Custom Installer, метод отката никогда не вызывался - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть класс установщика, вот фрагмент:

[RunInstaller(true)]
public partial class ServerWrapInstaller : Installer
{
    public override void Install(IDictionary stateSaver)
    {
        EventLog.WriteEntry("Installer", "Install", EventLogEntryType.Information);
        base.Install(stateSaver);
    }

    public override void Commit(IDictionary savedState)
    {
        EventLog.WriteEntry("Installer", "Commit", EventLogEntryType.Information);
        base.Commit(savedState);
    }

    public override void Rollback(IDictionary savedState)
    {
        EventLog.WriteEntry("Installer", "Rollback", EventLogEntryType.Information);
        base.Rollback(savedState);
    }

    public override void Uninstall(IDictionary savedState)
    {
        EventLog.WriteEntry("Installer", "UnInstall", EventLogEntryType.Information);
        base.Uninstall(savedState);
    }
 }

Теперь я запускаю установку в режиме полного графического интерфейса, а затем нажимаю кнопку «Отмена» в середине процесса, вызывая откат установки. Проблема в том, что метод RollBack не вызывается. Я не вижу ожидаемой записи в журнале событий.

Я хочу упомянуть, что если я позволю завершить установку, я увижу сообщение «Install» в журнале событий, а если я удалю его, я вижу сообщение «uninstall» в журнале событий. Но если остановить процесс установки посередине, нажав кнопку «Отмена», я вижу, что индикатор выполнения движется назад, но метод отката не вызывается.

что я делаю не так? заранее спасибо за любую помощь.

Edit:

Предоставление более подробной информации ...

Установщик представляет собой пакет MSI.

Пакет встроен в vs2009 с использованием проекта установки. Класс установщика используется как настраиваемое действие в проекте установки.

Поскольку это пакет MSI, у меня есть возможность запускать его в автоматическом режиме или в интерактивном режиме. Когда я писал «Режим полного графического интерфейса», я имел в виду интерактивный режим пользователя.

Ответы [ 3 ]

1 голос
/ 16 сентября 2009

Метод Rollback вызывается, когда что-то не получается во время процесса установки. Отмена установки вручную не считается. Например, у вас могут быть требуемые условия, проверить правильность версии фреймворка или проверить наличие файла, а затем выдать InstallException . Посмотрите на ссылку, и вы можете увидеть несколько примеров. Вы хотели бы обработать любые другие исключения в вашем откате.

В целях тестирования вы можете заставить его выйти из строя. Просто сгенерируйте исключение в одном из ваших методов, таких как метод установки. Добавьте эту строку:

throw new InstallException();
// or
throw new InstallException("Some error message here"); 

Затем должен быть вызван метод Rollback.

0 голосов
/ 10 декабря 2010

Обязательно добавьте свое пользовательское действие в папку «Откат» пользовательских действий

0 голосов
/ 02 июня 2010

Пожалуйста, проверьте, если вы предоставили пользовательские действия, которые вызвали ваши пользовательские методы установщика.

Полезные статьи:

...