MSI: чтение свойств из пользовательского действия в модуле слияния (MSM) - PullRequest
2 голосов
/ 01 ноября 2011

Я столкнулся с этой проблемой при попытке собрать МСМ.Очевидно, что свойства модуля (и все идентификаторы в этом отношении) переименовываются во время генерации модуля путем добавления GUID модуля в конце его имени.Например, свойство «MY_PROPERTY» переименовывается в «MY_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72» (при условии, что 803A3089-928F-46F1-BBAE-CBD39A7D6A72 является GUID модуля).Я полагаю, что это механизм, используемый для предотвращения конфликтов между несколькими модулями, пытающимися использовать идентификаторы с одним и тем же именем.

Изнутри MSM мне нужно вызвать специальное действие DLL, которое требует, чтобы определенное свойство было установлено с некоторымизначение (назовем это «THE_PROPERTY»).Проблема в том, что THE_PROPERTY переименовывается, как описано выше, в THE_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72, поэтому настраиваемое действие никогда не находит свойство и завершается неудачей.

Есть ли способ решить эту проблему?Я думал об изменении пользовательского действия, чтобы оно попыталось (каким-то образом) определить GUID модуля, из которого оно вызывается.Одним из способов сделать это может быть просмотр текущего имени действия, которое также должно включать GUID.Но можно ли получить имя текущего действия из пользовательского действия?Можете ли вы придумать другое решение?

Спасибо!

1 Ответ

2 голосов
/ 01 ноября 2011

Действительно, свойства внутри модуля слияния доступны с помощью GUID модуля после имени свойства.

Хорошим решением является предоставление доступа к пользовательскому действию THE_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72 вместо THE_PROPERTY.

Другим решением является использование пользовательского действия типа 51 :

  • в MSI создайте набор свойств с отформатированным настраиваемым действием (тип 51)
  • сконфигурируйте его для установки THE_PROPERTY на:

    [THE_PROPERTY.803A3089_928F_46F1_BBAE_CBD39A7D6A72]

  • запланируйте это перед пользовательским действием, которое читает THE_PROPERTY

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

Тип 51 настраиваемые действия добавляются по-разному для каждого инструмента создания настроек. Если вам нужны точные инструкции, пожалуйста, укажите инструмент установки, который вы используете. Visual Studio не поддерживает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...