Удаление с панели управления отличается от удаления из .msi - программирование

Удаление с панели управления отличается от удаления из .msi

Есть ли разница между удалением приложения с использованием MSX на основе WiX из панели управления и самого .msi?

Если есть, что это такое?

Я спрашиваю по следующей причине:

Разница в следующем: мой .msi хранит некоторые файлы в% PROGRAMDATA%. Если я удалю из панели управления, файлы там будут удалены (кажется, что .msi отслеживает их (они определены как компоненты)), но когда я открываю мой .msi и пытаюсь удалить (у меня есть диалог обслуживания) те файлы не удаляются.

Еще одно отличие: у меня также есть пользовательское действие, чтобы остановить мое приложение, если оно запущено, которое вызывается After = "AppSearch" в InstallUISequence и Before = "CostFinalize" в InstallExecuteSequence, но при удалении из .msi не вызывается. Только диалог показывает, что есть файлы, которые нужно удалить, но используются, но некоторые процессы, и когда я говорю, чтобы остановить их, это не так.

4b9b3361

Ответ 1

Следующее "обсуждение" получило немного из-под контроля. Но я оставлю его здесь как объяснение для людей, которые исследуют различия, возникающие между тихим режимом и интерактивным режимом установки.

Да, короткий ответ состоит в том, что вы действительно можете увидеть разные способы установки или удаления в зависимости от того, как вы вызываете (un) install.

Это в основном связано с тем, как 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 значение InstallUISequence пропущено.
  • Существует свойство MSI UILevel, содержащее значение уровня 2, 3, 4 или 5 уровня GUI. Проверьте это свойство, если ваше пользовательское действие должно учитывать тип пользовательского интерфейса. Это, очевидно, наиболее важно для совершенно бесшумных установок, которые никогда не должны показывать никаких диалогов.

  • Когда вы щелкните правой кнопкой мыши MSI и выберите удаление, вы обычно используете UILevel 3 (базовый интерфейс пользователя с индикатором выполнения). Это означает, что значение InstallUISequence пропущено.

  • Когда вы удаляете из "Установка и удаление программ" , нормальный UILevel также является 3-м базовым пользовательским интерфейсом. Это означает, что и InstallUISequence также пропущена.
  • Если вы дважды щелкните MSI и запустите удаление, ваш уровень GUI будет 5 - полным графическим интерфейсом. То же самое происходит, если вы выберете "Изменить" в программах добавления/удаления.

Таким образом, ошибки могут возникать только в одном из режимов (тихий/несимметричный), поскольку последовательность пользовательского интерфейса MSI пропускается вместе со всеми своими пользовательскими действиями для определенных уровней пользовательского интерфейса. Другими словами, продукт может работать при установке в интерактивном режиме и не работать при автоматической установке (или наоборот), если MSI плохо спроектирован.

Кроме того, можно выполнить произвольные действия в основной последовательности установки MSI на основе этой функции UILevel, чтобы результаты отличались в зависимости от режима установки. Я видел, как люди запускают диалоги из кода в пользовательских действиях, помещенных в основную последовательность установки (где интерактивности не разрешено), а затем используют проверки UILevel для подавления диалога в режиме бесшумной установки (или они также забывают о запуске скрытого модального диалога который останавливает установку при работе в бесшумном режиме). Эти странные конструктивные конструкции вызывают неожиданное поведение установки, основанное на том, как запускается и запускается установка.

Хотя это не ответ на то, что вы просили, окончательный вывод из всего этого состоит в том, что если ваше программное обеспечение предназначено для крупных корпораций, вы не должны тратить свои проектные усилия на продвинутый GUI для вашей установки, поскольку он, вероятно, никогда не будет использоваться для сценариев широкомасштабного развертывания. Скорее вы должны параметризовать ваш установщик с общедоступными свойствами, который можно установить в командной строке или с помощью transform, чтобы ваш установщик можно было легко контролировать без запуска в интерактивном режиме. См. Это сообщение: Как лучше использовать файлы MSI.

Поскольку я вышел за рамки вашего вопроса, я должен также отметить, что некоторые продвинутые инсталляторы, предназначенные для установки сервера, могут (с умеренностью) извлекать выгоду из хорошего графического интерфейса, чтобы помочь людям быстро получить ваше серверное программное обеспечение установлен и протестирован. Эти установщики имеют тенденцию вмешиваться в работу с такими расширенными функциями, как IIS, MS SQL, AD и т.д., И для хорошо осведомленных системных администраторов может потребоваться некоторая интерактивность. Но, как говорится, "большинство вещей может быть по умолчанию", и хорошие настройки по умолчанию, как правило, легче для людей, чтобы их установить и проверить, хорошо ли они или нет. Многие крупные компании запускают большие фермы виртуальных серверов в эти дни (один виртуальный сервер для каждого случая использования), поэтому даже установки на сервере, как правило, становятся автоматизированными для крупномасштабного развертывания, а затем оценен хороший параметризованный установщик с общедоступными свойствами. Меньшие компании могут также иметь виртуальные серверы (упрощая тестирование), но они могут установить вашу установку в интерактивном режиме, принимая любые значения по умолчанию - по крайней мере, это мое впечатление.

Ответ 2

Нет никакой практической разницы между щелчком правой кнопкой мыши MSI для его удаления и с помощью панели управления для ее удаления. Оба результата приводят к минимальному UI (не полностью бесшумному, показывает индикатор выполнения) и удаляют, если потребуется.

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

Если какой-то код где-то меняет что-то, то кто знает? Удаление из диалогового окна может выбрать подавление кнопки "Отмена" в качестве случайного примера.