WiX: измените .msi Directory и таблицу CustomAction с изменениями, которые будут использоваться .msp Patch файлом - PullRequest
0 голосов
/ 09 октября 2019

с помощью Wix Toolset v3.11 Я создал MSI-файл для своего приложения (скажем, версия 1.1) с элементом Directory, который нацелен на LocalAppDataFolder и помещает папку Temp внизу. Эта структура используется с элементом DirectoryRef, чтобы поместить туда некоторые файлы, к которым осуществляется доступ в пользовательском действии InstallFinalize. Теперь я сгенерировал патч (версия 1.2), который добавляет некоторые файлы в папку Temp. Но я хочу, чтобы эта папка была в TARGETDIR сейчас. Поэтому я изменил

<Directory Id="LocalAppDataFolder">
  <Directory Id="APPDATA_TEMP" Name="Temp" />
</Directory>

на

<Directory Id="MY_TEMP_PATH" Name=".">
  <Directory Id="APPDATA_TEMP" Name="Temp" />
</Directory>

под структурой

<Directory Id="TARGETDIR" Name="SourceDir">

. Для правильного применения исправления я открыл MSI-файл, на который есть ссылка в реестре (в папке HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ ... \ Products {GUID} \ InstallProperties \ LocalPackage ) с помощью инструмента Orca и отредактировал соответствующие значения в таблице Directory. Я также отредактировал таблицу CustomActions для ссылки на новый путь, поскольку он используется в качестве параметра там. Итак, теперь, когда я устанавливаю Patch, он помещает все файлы (измененные и новые) в LocalAppDataFolder, как это было при первоначальной установке. Настраиваемое действие вызывается с правильным параметром.

Есть ли способ изменить "базовую" msi для нацеливания на мою новую папку Temp или, в качестве альтернативы, как-то указать Patch использовать новую папку независимо отначальный путь?

Цель состоит в том, чтобы применить исправление без необходимости сначала удалять приложение.

Любая помощь в том, как этого добиться, очень ценится.

1 Ответ

0 голосов
/ 22 октября 2019

Наконец-то мы нашли решение. Итак, вот что решило нашу проблему, если кто-нибудь когда-нибудь сталкивался с чем-то подобным:

Мы нашли фактический путь LocalAppDataFolder в двух местах в реестре: Первая запись находится в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft\ Windows \ CurrentVersion \ Installer \ Folders . Второй - HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData ... \ Components . Запись с идентификатором компонента, которая помещает файлы в папку Temp, содержит ровно одно значение, то есть путь к первому файлу в этом компоненте. Мы изменили оба пути к нашей новой временной папке.

Теперь исправление правильно извлекает файлы в новую временную папку, и пользовательское действие может обрабатывать их дальше.

...