Custom Action - Удалить только если установлено - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть проект установщика Windows, прикрепленный к моему решению, который позволяет пользователю дополнительно установить два компонента приложения (они являются службами Windows) с помощью диалогового окна «Флажки», которое я добавил в пользовательский интерфейс, и тогда Условия на Пользовательские Действия ...

т.е. в Custom Actions / Install у меня есть

Первичный вывод из ProjectA (Active)
- Условие = PROJECTACHOSEN (то есть значение Checkbox1Property)

Первичный вывод из ProjectB (Active)
- Условие = PROJECTBCHOSEN (т.е. значение Checkbox2Property)

В Custom Actions / Uninstall я добавил те же два «Первичных выхода».

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

Какое условие можно добавить в Uninstall, чтобы установить службу, только если она установлена ​​в данный момент?

Я пробовал:

  • добавление тех же условий, что и при установке - это вообще не удаляет службы (вероятно, потому что вы не ставите галочки во время удаления)
  • Condition = "Installed", с которым я сталкивался в других местах в Интернете. Похоже, что это игнорируется, и деинсталлятор все еще пытается удалить обе службы.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

вы можете использовать ?ComponentName для проверки состояния установки компонента, я использовал его несколько месяцев назад.

Я нашел об этом в шпаргалке от flexera здесь

0 голосов
/ 16 ноября 2018

Лучшее решение, которое мне удалось найти, это:

  1. Добавьте поиск файлов «Условие запуска» для каждого проекта, который проверяет наличие файла .exe, являющегося службой, и присвойте ему значение «Свойство».

  2. Используйте значение свойства как «Условие» пользовательского действия.

Это работает, но я не совсем доволен этим, так как более важно, что служба удалена, чем exe, и если exe пропадет, она не будет работать, а служба останется ...

Редактировать

Даже это не сработает, если я не установлю «Глубину» поиска как минимум в 3 (даже если exe-файл находится в каталоге установки, а «Папка» установлена ​​в [TARGETDIR]), но если я это сделаю, установка занимает около 20 секунд - вероятно, из-за времени, необходимого для поиска 3-х уровней подкаталогов. Но если я установлю что-то меньшее, хотя установщик запускается быстро, он, похоже, не находит исполняемый файл и не удаляет службу ...

Разве [TARGETDIR] не должен отражать мой каталог установки и, следовательно, работать с глубиной 0?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...