Удаление из панели управления отличается от удаления из MSI
Есть ли разница между удалением приложения с.msi на основе WiX из панели управления и самого.msi?
Если есть что это?
Я спрашиваю по следующей причине:
Разница в следующем: мой.msi хранит некоторые файлы в%PROGRAMDATA%. Если я удаляю из Панели управления файлы там удаляются (кажется, что.msi отслеживает их (они определены как компоненты)), но когда я открываю.msi и пытаюсь удалить (у меня есть диалог обслуживания), те файлы не удаляются.
Другое отличие: у меня также есть настраиваемое действие для остановки моего приложения, если оно работает, которое вызывается после ="AppSearch" в InstallUISequence и до ="CostFinalize" в InstallExecuteSequence, но при удалении из MSI оно не будучи призванным Только диалог показывает, что есть файлы, которые нужно удалить, но они используются, но некоторые процессы, и когда я говорю, чтобы они остановились, он этого не делает.
2 ответа
Следующая "дискуссия" немного вышла из-под контроля. Но я оставлю это здесь как объяснение для людей, которые исследуют различия между тихим режимом и установками в интерактивном режиме.
Да, короткий ответ заключается в том, что вы действительно можете увидеть различное поведение при установке или удалении в зависимости от того, как вы вызываете (не) установку.
Это в основном связано с тем, как MSI может работать с различными уровнями пользовательского интерфейса, и это приводит к тому, что вся последовательность пользовательского интерфейса (InstallUISequence) в MSI либо запускается, либо пропускается полностью (установка без вывода сообщений). После пропуска все пользовательские действия, определенные только в InstallUISequence, вообще не будут выполняться. Если MSI хорошо спроектирован, это не проблема, поскольку настраиваемые действия пользовательского интерфейса выполняются в непосредственном режиме и никогда не должны вносить изменения в систему - они должны просто запрашивать пользовательские данные и настройки, состояние системы или помогать пользователю вводить правильные данные. для установки. Если MSI не спроектирован должным образом и в пользовательский интерфейс внесены изменения в систему, при работе в режиме без вывода сообщений установка будет неполной. Это серьезная ошибка проектирования MSI, которая становится еще более серьезной, когда вы поняли, что все крупные корпорации молча внедряют программное обеспечение. Я много раз видел такие ошибки при перепаковке корпоративных приложений. Это не вотум доверия к программному обеспечению, каким бы хорошим оно ни было. Странные и непредсказуемые проблемы связаны с поверхностью.
Соответственно, InstallExecuteSequence (которая является единственной, которая запускается, когда установка устанавливается без вывода сообщений) должна иметь все необходимые настраиваемые действия, которые вносят системные изменения, чтобы MSI был правильно спроектирован. Как уже говорилось, настраиваемые действия, существующие только в последовательности пользовательского интерфейса, должны иметь дело с получением значений и настроек от пользователя, тогда как эти значения должны быть установлены и определены командной строкой или определены в преобразованиях для установки без вывода сообщений.
Определенные нечетные и ошибочные комбинации условий настраиваемых действий могут также вызвать различия между интерактивной и тихой установками в особых обстоятельствах. И, наконец, размещение пользовательских действий после InstallFinalize в InstallExecuteSequence может привести к сбою действий при автоматическом запуске. Конечно, есть и другие потенциальные проблемы.
Таким образом, если вы видите разницу в поведении установки в зависимости от уровня пользовательского интерфейса, ваш MSI содержит серьезный недостаток дизайна. Вы должны всегда следить за тем, чтобы ваш MSI мог работать бесшумно с эквивалентным результатом в интерактивном режиме. И, как уже говорилось, крупные корпорации никогда не запускают установки в интерактивном режиме, поскольку они распространяют программное обеспечение через системы управления программным обеспечением, такие как SCCM.
Существует 4 уровня пользовательского интерфейса MSI: от полностью бесшумного до полностью интерактивного:
- INSTALLUILEVEL_NONE = 2, (абсолютно тихо)
- INSTALLUILEVEL_BASIC = 3, (индикаторы выполнения и простая обработка ошибок)
- INSTALLUILEVEL_REDUCED = 4, (созданный пользовательский интерфейс, без мастеров)
- INSTALLUILEVEL_FULL = 5 (полный пользовательский интерфейс)
- Важным моментом является то, что для UILevel 2 и 3 последовательность InstallUIS пропускается.
Существует свойство MSI UILevel, содержащее значение уровня GUI 2, 3, 4 или 5. Проверьте это свойство, если ваше настраиваемое действие должно учитывать тип пользовательского интерфейса. Это, очевидно, наиболее важно для полностью тихих установок, которые никогда не должны показывать никаких диалогов.
Когда вы щелкаете правой кнопкой мыши по MSI и выбираете удаление, вы обычно запускаете UILevel 3 (базовый интерфейс с индикатором выполнения). Это означает, что InstallUISequence пропущен.
- Когда вы удаляете из Add/Remove программ, обычный UILevel также имеет 3 - базовый пользовательский интерфейс. Это означает, что InstallUISequence также пропущен.
- Если дважды щелкнуть MSI и запустить деинсталляцию, ваш уровень графического интерфейса 5 - полный графический интерфейс. То же самое происходит, если вы выбираете "Изменить" в добавлении / удалении программ.
Таким образом, ошибки могут возникать только в одном из режимов (тихий / не тихий), поскольку последовательность интерфейса пользователя MSI пропускается вместе со всеми его пользовательскими действиями для определенных уровней интерфейса пользователя. Другими словами, продукт может работать при интерактивной установке и не работать при автоматической установке (или наоборот), если MSI плохо спроектирован.
Также возможно обусловить пользовательские действия в основной последовательности установки MSI ошибочно на основе этой функции UILevel, чтобы результаты различались в зависимости от режима установки. Я видел, как люди порождают диалоги из кода в пользовательских действиях, размещенных в основной последовательности установки (где интерактивность не разрешена), а затем используют проверки UILevel для подавления диалога в режиме без вывода сообщений (или они также забывают об этом, вызывая скрытый модальный диалог). что останавливает установку при работе в беззвучном режиме). Эти странные конструктивные конструкции приводят к неожиданному поведению при установке в зависимости от того, как установка запущена и запущена.
Хотя это не своего рода ответ на ваш вопрос, окончательный вывод из всего этого заключается в том, что, если ваше программное обеспечение предназначено для крупных корпораций, вам не следует тратить свои усилия на разработку усовершенствованного графического интерфейса для вашей установки, поскольку, скорее всего, этого никогда не произойдет. использоваться для масштабных сценариев развертывания. Скорее вы должны параметризовать ваш установщик с помощью общих свойств, которые можно установить в командной строке или с помощью преобразования, чтобы вашим установщиком можно было легко управлять, не запуская его в интерактивном режиме. Смотрите этот пост: Как лучше использовать файлы MSI.
Поскольку я вышел далеко за пределы вашего вопроса, я также должен отметить, что некоторые продвинутые установщики, предназначенные для установки на сервер, могут (с модерацией) воспользоваться хорошим графическим интерфейсом, который поможет людям быстро установить и протестировать программное обеспечение вашего сервера. Эти установщики, как правило, вмешиваются в работу с очень продвинутыми функциями, такими как IIS, MS SQL, AD и т. Д., И для опытных системных администраторов может потребоваться некоторая интерактивность. Но, как говорится, "большинство вещей может работать по умолчанию", и хорошие настройки по умолчанию, как правило, легче установить и протестировать людям, независимо от того, осведомлены они или нет. Многие крупные компании в настоящее время используют крупные фермы серверных виртуальных систем (по одному виртуальному серверу на каждый сценарий использования), поэтому даже установки серверов, как правило, автоматизируются для крупномасштабного развертывания, и тогда приветствуется хороший параметризованный установщик с общедоступными свойствами, которые нужно установить. Небольшие компании могут также иметь виртуальные серверы (что упрощает тестирование), но они, вероятно, установят вашу установку в интерактивном режиме, принимая любые значения по умолчанию - по крайней мере, это мое впечатление.
Нет практической разницы между щелчком правой кнопкой мыши на MSI для его удаления и использованием панели управления для его удаления. Оба результата приводят к минимальному удалению пользовательского интерфейса (не совсем тихо, показывает индикатор выполнения) и будут запрашивать повышение прав в случае необходимости.
Если у вас есть диалоговое окно режима обслуживания, то у вас может быть немного другой путь - вы можете показать диалоговое окно, которое предлагает изменить функции, восстановить или удалить. Это может привести к разнице где-то.
Если где-то есть код, который что-то изменяет, то кто знает? В качестве случайного примера при удалении из диалогового окна может потребоваться отключить кнопку "Отмена".