WiX и ARPINSTALLLOCATION

Я хочу, чтобы мой пакет MSI записал значение InstallLocation в HKEY_LOCAL_MACHINE\SOFTWARE\\(Wow6432Node)\Microsoft\Windows\CurrentVersion\Uninstall\\(GUID). Вы также должны увидеть это значение в панели управления «Установка и удаление программ» (столбец Location).

Чтобы установить это значение через WiX, я читал, что свойство ARPINSTALLLOCATION должно быть установлено с помощью специального действия. Я уменьшил <Product> до минимума. Вот как это выглядит:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*" 
           Name="MyApplication"
           Language="1033" 
           Version="!(bind.FileVersion.MyApplication.exe)" 
           Manufacturer="Me"
           UpgradeCode="db37f5dc-68c5-46ee-bbdf-704ff68b70db">
    <Package InstallerVersion="400" Compressed="yes" InstallScope="perMachine" Languages="0" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <!-- use SetProperty as suggested by Rolo -->
    <SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CostFinalize" />
    <Feature Id="ProductFeature" Title="MyApplication" Level="1">
      <ComponentGroupRef Id="MyApplication.Files.AllRequired" />
    </Feature>
  </Product>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLDIR" Name="MyApplication" />
      </Directory>
    </Directory>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="MyApplication.Files.AllRequired">
      <Component Id="ProductComponent" 
                 Guid="90EA8F1C-77D2-40E1-81AD-44B076EFAB9D" 
                 Directory="INSTALLDIR">
        <File Id="MyApplication.exe" Source="$(var.MyApplication.TargetDir)\MyApplication.exe" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>

MSI входит в стандартный загрузчик WiX.


person Johannes    schedule 16.12.2014    source источник
comment
Очевидный комментарий может быть, но его не будет, если это установка для каждого пользователя (см. HKCU) или если это 64-битная установка.   -  person PhilDW    schedule 16.12.2014
comment
В пакете есть InstallScope=perMachine, поэтому он должен быть либо в HKLM\Software\... (или в Wow6432Node). В любом случае он должен отображаться на панели управления «Установка и удаление программ» в столбце Местоположение.   -  person Johannes    schedule 17.12.2014
comment
Я обновил приведенный выше код, чтобы получить полный (но уменьшенный) <Product>   -  person Johannes    schedule 17.12.2014


Ответы (1)


Вы должны выполнить свое настраиваемое действие в обеих последовательностях (InstallExecuteSequence и InstallUISequence) и упорядочить его после CostFinalize.

Вы можете упростить это, используя что-то вроде этого:

<SetProperty Id="ARPINSTALLLOCATION" Value="[INSTALLDIR]" After="CostFinalize" />
person Rolo    schedule 16.12.2014
comment
@Johannes, не могли бы вы предоставить соответствующую часть журнала установщика? - person Rolo; 17.12.2014
comment
Начало действия 09:15:07: CostFinalize. MSI (s) (0C:6C) [09:15:07:660]: Выполнение действия: SetARPINSTALLLOCATION MSI (s) (0C:6C) [09:15:07:660]: Примечание: 1: 2205 2: 3 : ActionText Действие завершено 09:15:07: CostFinalize. Возвращаемое значение 1. MSI (s) (0C:6C) [09:15:07:662]: ИЗМЕНЕНИЕ СВОЙСТВА: добавлено свойство ARPINSTALLLOCATION. Его значение — «C:\Program Files (x86)\MyApp\». Начало действия 09:15:07: SetARPINSTALLLOCATION. MSI (s) (0C:6C) [09:15:07:663]: Выполнение действия: MigrateFeatureStates MSI (s) (0C:6C) [09:15:07:663]: Примечание: 1: 2205 2: 3 : ActionText Действие завершено 09:15:07: SetARPINSTALLLOCATION. Возвращаемое значение 1.` - person Johannes; 17.12.2014
comment
По какой-то причине в комментарии не работает символ новой строки, добавить его в вопрос? - person Johannes; 17.12.2014
comment
@Johannes Ваш журнал выглядит правильно, я также проверил ваш код локально, и он сработал. Теперь вопрос, который у меня есть... Где вы ищете это значение? Я вижу это в реестре и в программах и компонентах (ARP). Когда вы находитесь в «Программы и компоненты», измените представление на «Подробности», щелкните правой кнопкой мыши заголовок столбца, т. е. «Имя», и нажмите «Дополнительно», затем найдите столбец «Расположение» и добавьте его. Вы увидите значение там, в противном случае вы не увидите его в сводке внизу окна. - person Rolo; 17.12.2014
comment
Я не упомянул, что у меня есть загрузчик, который устанавливает MSI. Никогда не думал, что это имеет значение. Когда я устанавливаю программное обеспечение с помощью MSI, все работает нормально. Но при использовании загрузчика WiX (который включает в себя MSI) он не создает разделы реестра. - person Johannes; 18.12.2014
comment
@Johannes, в этом случае вам нужно добавить атрибут Visible=yes к вашему элементу MsiPackage. - person Rolo; 18.12.2014
comment
Хорошо, это имеет смысл. Но тогда есть 2 записи в «Установка и удаление программ». Я хотел бы иметь только 1 запись (загрузчик). Возможно ли, что загрузчик пишет InstallLocation? - person Johannes; 19.12.2014
comment
@Johannes Йоханнес Я думаю, твоя первоначальная проблема решена, верно? Что касается этого нового вопроса, вы можете избежать загрузчика для создания записей в ARP, вы найдете дополнительную информацию по этой ссылке stackoverflow.com/questions/22626992/ - person Rolo; 19.12.2014