Завершение процесса в CustomAction
У меня есть класс установщика пользовательских действий, в котором я перехватываю оба следующих события:
- OnBeforeUninstall
- Удалить
Что я на самом деле пытаюсь сделать, так это завершить процесс, который я создал в моем главном приложении... этот "процесс" - это, по сути, исполняемый файл, который я запустил, который находится в системном трее и отображает уведомления для пользователей каждые 2 минут.
Когда я выбираю удаление моего основного приложения, мне предлагается следующее диалоговое окно:
Однако странно, что код, который я поместил в OnBeforeUninstall и Uninstall, запускается после этого диалога.
Я не хочу, чтобы этот диалог появлялся вообще.
Я делаю что-то неправильно?
Из моего исследования я заметил, что это диалоговое окно от ключа InstallValidate в ORCA. Я не знаю, безопасно ли планировать свой CA до этого.
Любой способ безопасно прекратить мой процесс без появления этого диалога?
2 ответа
Ну, после долгих исследований в Google и на конкретном форуме Yahoo все, что мне нужно было сделать, это отредактировать MSI через Orca.
- Открыл таблицу свойств
- Добавлено свойство MSIRESTARTMANAGERCONTROL
- Установите его значение 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);
}