Причина
Когда вы пишете <Directory Id="WIX_DIR_COMMON_DOCUMENTS">
в источнике модуля слияния, WiX модульно идентифицирует каталог, чтобы предотвратить конфликты с любыми существующими идентификаторами каталогов в продукте, который использует модуль слияния.,
Вы можете убедиться в этом, открыв файл MSM в Orca или InstEd (рекомендуется) и посмотрите на таблицу Directory
.Вы увидите идентификатор каталога, например WIX_DIR_COMMON_DOCUMENTS.9FE2C761_1860_4D8C_8538_352164BDC12F
.Добавленный GUID - это идентификатор модуля слияния.
К сожалению, настраиваемое действие WixQueryOsDirs
устанавливает только свойство WIX_DIR_COMMON_DOCUMENTS
вместо использования идентификатора модульного каталога, поэтому идентификатор модульного каталога по-прежнему будет указывать на каталог файлов программы..
Решение
Подавить модуляризацию для WIX_DIR_COMMON_DOCUMENTS
следующим образом:
<PropertyRef Id="WIX_DIR_COMMON_DOCUMENTS"/>
<Property Id="WIX_DIR_COMMON_DOCUMENTS" SuppressModularization="yes"/>
Вы можете получить несколько предупреждений при построении установки, которая использует модуль слияния, когда этопрограмма установки уже ссылается на WIX_DIR_COMMON_DOCUMENTS
или другие каталоги из WixUtilExtension.Их можно безопасно игнорировать.
E.г.в моем эксперименте я получил следующие предупреждения:
C:\Users\REDACTED\source\repos\SetupProject1\SetupProject1\Product.wxs(38,0): warning LGHT1056: The Directory table contains a row with primary key(s) 'WIX_DIR_COMMON_DOCUMENTS' which cannot be merged from the merge module 'C:\Users\REDACTED\source\repos\SetupProject1\MergeModule1\bin\Debug\MergeModule1.msm'. This is likely due to collision of rows with the same primary key(s) (but other different values in other columns) between the database and the merge module.
C:\Users\REDACTED\source\repos\SetupProject1\SetupProject1\Product.wxs(38,0): warning LGHT1055: The InstallUISequence table contains an action 'WixQueryOsDirs' which cannot be merged from the merge module 'C:\Users\REDACTED\source\repos\SetupProject1\MergeModule1\bin\Debug\MergeModule1.msm'. This action is likely colliding with an action in the database that is being created. The colliding action may have been authored in the database or merged in from another merge module. If this is a standard action, it is likely colliding due to a difference in the condition for the action in the database and merge module. If this is a custom action, it should only be declared in the database or one merge module.
C:\Users\REDACTED\source\repos\SetupProject1\SetupProject1\Product.wxs(38,0): warning LGHT1055: The InstallExecuteSequence table contains an action 'WixQueryOsDirs' which cannot be merged from the merge module 'C:\Users\REDACTED\source\repos\SetupProject1\MergeModule1\bin\Debug\MergeModule1.msm'. This action is likely colliding with an action in the database that is being created. The colliding action may have been authored in the database or merged in from another merge module. If this is a standard action, it is likely colliding due to a difference in the condition for the action in the database and merge module. If this is a custom action, it should only be declared in the database or one merge module.
C:\Users\REDACTED\source\repos\SetupProject1\SetupProject1\Product.wxs(38,0): warning LGHT1056: The CustomAction table contains a row with primary key(s) 'WixQueryOsDirs' which cannot be merged from the merge module 'C:\Users\REDACTED\source\repos\SetupProject1\MergeModule1\bin\Debug\MergeModule1.msm'. This is likely due to collision of rows with the same primary key(s) (but other different values in other columns) between the database and the merge module.
C:\Users\REDACTED\source\repos\SetupProject1\SetupProject1\Product.wxs(38,0): warning LGHT1056: The Property table contains a row with primary key(s) 'SecureCustomProperties' which cannot be merged from the merge module 'C:\Users\REDACTED\source\repos\SetupProject1\MergeModule1\bin\Debug\MergeModule1.msm'. This is likely due to collision of rows with the same primary key(s) (but other different values in other columns) between the database and the merge module.
Итак, WiX сообщает нам, что он не может импортировать свойства WIX_DIR_COMMON_DOCUMENTS
, SecureCustomProperties
и пользовательское действие WixQueryOsDirs
, поскольку они уже существуют в основном продукте.Здесь не о чем беспокоиться, потому что компоненты модуля слияния будут счастливо использовать существующее свойство WIX_DIR_COMMON_DOCUMENTS
.