Как определить объем установки существующего приложения? - PullRequest
1 голос
/ 03 июля 2019

У меня есть установщик, основанный на WixUI_Advanced, который позволяет пользователям выбирать область их установки (для каждого пользователя или всей машины).

При обновлении (установите существующее приложение с более низкой версией), я бынравится скрывать экран области установки и автоматически выбирать область установки, которую они выбрали в прошлый раз.

Как узнать, какая область установки использовалась для предыдущей установки?


Редактировать

Глядя на мои журналы MSI, я вижу, что моя существующая установка найдена:

// Existing user specific installation
FindRelatedProducts: Found application: {C5D3DCD0-4A97-4224-AF22-BDDEB357EEB7}
MSI (c) (C4:F0) [11:11:39:289]: PROPERTY CHANGE: Adding WIX_UPGRADE_DETECTED property. Its value is '{C5D3DCD0-4A97-4224-AF22-BDDEB357EEB7}'.
MSI (c) (C4:F0) [11:11:39:289]: PROPERTY CHANGE: Adding MIGRATE property. Its value is '{C5D3DCD0-4A97-4224-AF22-BDDEB357EEB7}'.

// Existing machine wide installation
MSI (c) (2C:4C) [11:03:19:258]: FindRelatedProducts: current install is per-user.  Related install for product '{C5D3DCD0-4A97-4224-AF22-BDDEB357EEB7}' is per-machine.  Skipping...

Я вижу, что свойства WIX_UPGRADE_DETECTED и MIGRATE установлены, только когдаобласть действия существующей установки соответствует текущей установке, что имеет смысл.Возможно, я могу использовать FindRelatedProducts напрямую?

1 Ответ

1 голос
/ 06 июля 2019

Это не полный ответ. Я должен был добавить в качестве ответа из-за требования к форматированию.


ОБНОВЛЕНИЕ : Посмотрел на это, снова истекло время. 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 ):

Orca


Добавьте еще несколько ссылок:

...