2010-11-28 2 views
3

I overrode OnBeforeUninstall, чтобы остановить проект установки моего приложения при его удалении при определенных обстоятельствах, но похоже, что он просто не вызван и не имеет никакого эффекта.Предотвратить удаление в проекте установки с помощью OnBeforeUninstall

protected override void OnBeforeUninstall(IDictionary savedState) 
{ 
    if (ApplicationIsBusy()) 
     throw new ApplicationException("Prevent uninstall while application busy."); 
} 

Я могу отменить удаление путем переопределения метода Uninstall, а затем проект установки уже закрыл мое заявление. Как выполнить «неудачу» попытки удаления, когда мое приложение занято до, проект установки пытается закрыть его при запуске и прерывает мой рабочий процесс?

+1

Попробуйте написать там сообщение трассировки: http://msdn.microsoft.com/en-us/library/system.diagnostics.trace.writeline.aspx, чтобы проверить, вызван ли этот метод или нет. Вы можете проверить сообщения трассировки с помощью debugView http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx – 2010-11-28 15:23:06

ответ

2

Перед вызовом вашего пользовательского кода вызовите base.OnBeforeUninstall (savedState), чтобы зарегистрированные делегаты получили событие, тем самым позволяя выполнить собственный код перед деинсталляцией.

protected override void OnBeforeUninstall(IDictionary savedState) 
{ 
    // Add this 
    base.OnBeforeUninstall(savedState); 

    if (ApplicationIsBusy()) 
     throw new ApplicationException("Prevent uninstall while application busy."); 
} 
3

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