Это не полный ответ. Я должен был добавить в качестве ответа из-за
требования к форматированию.
ОБНОВЛЕНИЕ : Посмотрел на это, снова истекло время. This really is no answer at all, but just lobbing it to you in case it can help you research it yourself
.
Сохранение реестра : я полагаю, вы пытались сохранить ALLUSERS
и / или область установки в реестре и считали ее обратно в обновленном MSI? Я не смотрел на это. Чтобы это работало, вы должны сделать это в первом выпуске пакета и поддерживать его позже.
MSI API Automation : Вот небольшой взлом, чтобы найти ранее установленные продукты на коробке (по сути, он запускает такие же вещи, как "FindRelatedProducts"
внутри файлов MSI):
Внутри MSI :
Set upgrades = Session.installer.RelatedProducts("INSERT-UPGRADE-CODE")
For Each u In upgrades
scope = Session.installer.ProductInfo(u,"AssignmentType")
MsgBox CStr(scope)
Next
Автономно, запускайте скрипт напрямую (установите MSI с кодом обновления, указанным первым):
Set installer = CreateObject("WindowsInstaller.Installer")
Set upgrades = installer.RelatedProducts("INSERT-UPGRADE-CODE")
For Each u In upgrades
MsgBox "Product Code: " & u & vbNewLine & "Installation Context: " & installer.ProductInfo(u,"AssignmentType")
Next
MsgBox "Done"
Я думал сделать что-то подобное в GUI-последовательности, но время снова истекло:
If scope = 1 Then
Session.Property("ALLUSERS") = "1"
Session.Property("MSIINSTALLPERUSER") = ""
Session.Property("WixAppFolder") = "WixPerMachineFolder"
Else
Session.Property("ALLUSERS") = "2"
Session.Property("MSIINSTALLPERUSER") = "1"
Session.Property("WixAppFolder") = "WixPerUserFolder"
End If
Фрагменты WiX :
<Binary Id='Scope.vbs' SourceFile='Debugging Custom Actions\Scope.vbs' />
<CustomAction Id='Scope.vbs' VBScriptCall='' BinaryKey='Scope.vbs' Execute='immediate' Return='ignore'/>
<..>
<InstallUISequence>
<Custom Action='Scope.vbs' Before='CostInitialize' />
</InstallUISequence>
Я собирался посмотреть на это, но не хватило времени. По существу, WIX_UPGRADE_DETECTED
будет установлено в новой устанавливаемой установке. См. Этот ответ для более . Вы можете использовать это свойство, чтобы определить, следует ли скрыть или показать кнопку. Я проверил это вкратце, и это сработало, но реализовать его в WiX сложнее. Вы должны переопределить весь диалог, я думаю.
В таблицах MSI это будет примерно так (скриншот Orca - Средства просмотра MSI ):
Добавьте еще несколько ссылок: