InstallFinalize : Вы пишете в HKCU
или HKLM
? Все, что упорядочено после InstallFinalize
, не будет работать с повышенными правами в управляемой среде и, следовательно, не будет работать во время установки, если вы попытаетесь записать в HKLM
(если вы не измените ACL для ключа вы пишете в - или вы запускаете MSI из cmd.exe, который уже повышен - не рекомендуется, пакет содержит ошибки).
MaintenanceMode : Это условие выглядит так, как будто оно зависит от Installshield: NOT Installed OR MaintenanceMode="Modify"
. Я думаю, что Installshield сам устанавливает это свойство MaintenanceMode
в проприетарной форме. Следовательно, он вообще недоступен в WiX.
Условия тестирования : Условия могут быть сложными для тестирования, и вам необходимо провести реальное тестирование во многих режимах установки (install
, uninstall
, repair
, modify
, patch
, major upgrade
, self-repair
, etc...
), чтобы убедиться, что они соответствуют вашему конкретному случаю и работают, как ожидалось. Типичный сценарий, когда люди удивляются кондиционированию, - это серьезные обновления - удаление старой версии и установка новой версии - в моем опыте обнаруживаются неожиданные проблемы с условиями. Часто из-за сложных проблем с секвенированием и того факта, что во время такого обновления выполняются как последовательность удаления старой установки, так и последовательность установки новой установки. Следовательно, ошибочно обусловленные пользовательские действия могут запускаться несколько раз во время основного процесса обновления и вызывать настоящий беспорядок.
Совет по тестированию : Чтобы выполнить быстрое серьезное обновление, необходимо изменить код продукта и увеличить одну из первых 3 цифр версии. И вам нужно иметь элемент MajorUpgrade там. Вы можете установить код продукта для автоматической генерации, установив его на *
(я предпочитаю менять его вручную). Скомпилируйте MSI, добавьте суффикс "_Version1"
, затем выполните указанные обновления и скомпилируйте "_Version2"
. Запустите процедуру обновления. Вы также должны указать на обновленные файлы для версии 2, изменив исходный путь, но вы можете перейти без него к условиям тестирования.
Изменить : В вашем случае есть шпаргалка от Installshield парней, предлагающих следующее условие в их "MSI Condition Cheat Sheet" :
Installed AND NOT REINSTALL AND NOT REMOVE~="ALL"
- Приведенное выше условие должно разрешать выполнение настраиваемого действия только в операциях изменения. Если вы немного измените его, он должен работать только для установки и изменения:
NOT Installed OR ((Installed AND NOT REINSTALL) AND NOT REMOVE~="ALL")
Завтра мне придется выполнить дополнительную проверку этого последнего условия, но я просто опубликую это, чтобы вы могли проверить себя. Я взял патч, но, возможно, мне стоит добавить его обратно, чтобы покрыть основные обновления патча. Будете ли вы доставлять патчи?
Быстрый макет для тестирования условий легкого веса :
The VBScript
* * 1092
Примечание! Убедитесь, что файл VBScript находится в UTF8
или ANSI
. Unicode не будет работать. Может быть, создать его в блокноте, а не в Visual Studio. У меня возникли проблемы при создании файла VBScript в виде текстового файла WiX, который я затем переименовал в формат *.vbs
. Не делай этого.
MsgBox "I run, therefore I am conditioned and sequenced"
WiX Markup, Custom Action
<Binary Id='SayHelloMsgBox.vbs' SourceFile='SayHelloMsgBox.vbs' />
<CustomAction Id='SayHelloMsgBox.vbs' VBScriptCall='' BinaryKey='SayHelloMsgBox.vbs' Execute='immediate' Return='ignore' />
WiX Markup, Sequencing & Conditioning
<InstallExecuteSequence>
<Custom Action='SayHelloMsgBox.vbs' After='InstallInitialize'>NOT Installed OR ((Installed AND NOT REINSTALL) AND NOT REMOVE~="ALL")</Custom>
</InstallExecuteSequence>