Диалог обновления установщика wix и диалог подтверждения

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

  • Вы подтверждаете, что хотите установить эту новую версию?
    • Да, мы продолжаем процесс
    • Нет: отменяет установку

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

Спасибо,

Julien

2 ответа

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

В общем случае вы создаете диалоговое окно "Хотите обновить" с помощью кнопок "Далее" и "Отмена", спрашивающих, следует ли продолжить обновление. Условие, показывающее это на WIX_UPGRADE_DETECTED. UPGRADINGPRODUCTCODE не имеет значения, поскольку он установлен в более раннем обновляемом продукте.

Свойство WIX_UPGRADE_DETECTED - это код продукта (или список) обновляемых продуктов, поэтому вы можете подумать о запросе имени и версии этого продукта, но обычно это не работает, когда запрос требует повышения прав (поскольку пользовательский интерфейс последовательность не повышена).

Отказ от ответственности: нижеприведенная процедура или образец является только демонстрацией - это не обязательно рекомендация. Сама функциональность (прервать серьезное обновление) и использование VBScript (не одобряемый профессионалами по развертыванию) делают эту процедуру нежелательной, но возможной.

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

Вот быстрый макет (извиняюсь за неаккуратный код, просто пытаюсь показать, как это можно сделать быстро - слишком торопливо - это всего лишь один из способов сделать это):

On Error Resume Next

themessage = "Do you want to continue upgrading?"
messagetitle = "Continue to upgrade?"
messagetype = vbYesNo + vbInformation + vbDefaultButton1 + vbSystemModal

userresponse = MsgBox (themessage, messagetype, messagetitle)

' Abort if requested by user
If userresponse = vbYes Then
     Session.Property("DOUPGRADE") = "YES"
   Else
     Session.Property("DOUPGRADE") = "NO"
End If

Затем вы добавляете type 19 custom action запускаться сразу после пользовательского действия VBScript, и оно прервет установку, если для DOUPGRADE установлено значение "NO". Другими словами, вы вводите пользовательское действие 19 с помощью DOUPGRADE ~= "NO" и бросить в NOT REMOVE="ALL", Я полагаю, что мог бы просто вернуть ошибку из VBScript напрямую (мы запускаем немедленно, поэтому откат транзакции не требуется), но, кажется, лучше использовать встроенный метод прерывания по умолчанию. Я не уверен, работает ли функция WScript.Quit(errnumber) из сценариев VBScripts, размещенных на самом движке msiexec. Я не пробовал это.

ОБНОВЛЕНИЕ: см. Здесь: как прекратить установку MSI с помощью настраиваемого действия vbscript и воскреснуть с помощью WayBackMachine: Информационный бюллетень Installshield : выход из установки MSI из настраиваемого действия (рекомендуется).

Вам нужно будет вставить пользовательское действие VBScript после FindRelatedProducts в InstallUISequence (последовательность интерфейса пользователя). Просто установите его для запуска синхронно и немедленно. Заставь чертовски хорошо показывать только когда YOURUPGRADEPROPERTY установлено! (это свойство, установленное в таблице обновлений - столбец ActionProperty - для хранения списка связанных продуктов, найденных FindRelatedProducts). Возможно добавлю AND NOT PATCH AND NOT REMOVE~="ALL" также. Пожалуйста, проверьте себя.

Уже поздно, и условия всегда сбивают с толку и подвержены ошибкам, и их легко перепутать (когда они установлены и т. Д.). Может быть, посмотрите здесь: Как добавить пользовательское действие WiX, которое происходит только при удалении (через MSI)? Я не могу гарантировать эту таблицу - я не потратил время на систематическое тестирование информации, но это выглядит нормально по номинальной стоимости. Тем не менее, я считаю, REMOVE например, иногда может быть установлен во время установки - очень сложно справиться со всеми изменениями возможностей, так как интерфейс командной строки MSI и конфигурация свойств очень гибки. По крайней мере, это помогает планировать тестирование. В заключение, Installed будет справедливо при незначительном обновлении, но не при значительном обновлении (серьезное обновление - это новый продукт, удаляющий более старый продукт - новый продукт технически не установлен - пока). Все это кратко изложено здесь: можно ли запускать пользовательские действия только в режиме восстановления.

Здесь есть еще одна шпаргалка от Installshield - я никогда не проверял условия. Я повторяюсь, но тестирование в реальной жизни имеет решающее значение. Как говорит Грэди Буч: " ... пользователи удивительно креативны, когда дело доходит до использования системы неожиданным образом " ( src).

Теперь протестируйте полный цикл развертывания вашей установки. Установка, восстановление, самовосстановление, удаление, обновление, исправление (если есть), чтобы убедиться, что неожиданные побочные эффекты не видны (вы всегда увидите некоторые). Не полагайтесь на мои предложенные выше условия - здесь очень поздно:-). Проверьте хорошо.

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

Дополнительно: если вы предоставляете свои настройки на разных языках, вам нужно будет локализовать это диалоговое окно и сообщение об отмене. У меня есть некоторый макет кода VBScript для этого, если вам нужна локализация.

Другие вопросы по тегам