Завершение процесса в CustomAction

У меня есть класс установщика пользовательских действий, в котором я перехватываю оба следующих события:

  1. OnBeforeUninstall
  2. Удалить

Что я на самом деле пытаюсь сделать, так это завершить процесс, который я создал в моем главном приложении... этот "процесс" - это, по сути, исполняемый файл, который я запустил, который находится в системном трее и отображает уведомления для пользователей каждые 2 минут.

Когда я выбираю удаление моего основного приложения, мне предлагается следующее диалоговое окно:

введите описание изображения здесь

Однако странно, что код, который я поместил в OnBeforeUninstall и Uninstall, запускается после этого диалога.

Я не хочу, чтобы этот диалог появлялся вообще.

Я делаю что-то неправильно?

Из моего исследования я заметил, что это диалоговое окно от ключа InstallValidate в ORCA. Я не знаю, безопасно ли планировать свой CA до этого.

Любой способ безопасно прекратить мой процесс без появления этого диалога?

2 ответа

Ну, после долгих исследований в Google и на конкретном форуме Yahoo все, что мне нужно было сделать, это отредактировать MSI через Orca.

  1. Открыл таблицу свойств
  2. Добавлено свойство MSIRESTARTMANAGERCONTROL
  3. Установите его значение Disable

Избавился от появления Диалога, и мой собственный код пользовательского действия позаботился о том, чтобы убить процесс.

Надеюсь, это кому-нибудь поможет.

Вам нужно дождаться завершения процесса и продолжить удаление - WaitForExit или HasExited

Метод Kill выполняется асинхронно. После вызова метода Kill вызовите метод WaitForExit, чтобы дождаться завершения процесса, или проверьте свойство HasExited, чтобы определить, завершился ли процесс.

Process p = ...
p.Kill();
while(!p.HasExited)
{ 
    p.WaitForExit(1000); 
}

Завершить процесс до начала удаления -

public override void Uninstall(System.Collections.IDictionary savedState)
    {
        KillProcess();
        base.Uninstall(savedState);
    }
Другие вопросы по тегам