Wix: передача значений контроля диалога в настраиваемые модули слияния - PullRequest
2 голосов
/ 21 сентября 2011

У меня проблемы с выполнением задачи с помощью Wix Toolset. В частности, у меня есть сценарий, в котором у меня есть MSI, который настраивает MSM (настраиваемый модуль). MSI имеет пользовательский диалог пользовательского интерфейса, из которого пользовательский ввод должен использоваться для настройки MSM.

Когда я пытаюсь настроить MSM, используя жестко закодированное значение для свойства адреса, как показано ниже, оно работает нормально, и MSM настроен правильно. (Я полагаю, что такая конфигурация происходит и время сборки в отличие от времени выполнения - проблема может лежать там.).

Проблема возникает, когда я использую пользовательский диалог для установки значения свойства адреса во время установки (т. Е. Во время выполнения). Конфигурируемый модуль по-прежнему использует жестко заданное значение, а не пользовательский ввод. Это проблема, потому что конфигурация модуля слияния выполняется только во время сборки. Есть ли способ передать значение в модуль слияния из пользовательского интерфейса основного MSI?

Вот упрощенная версия:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

    <Product Id="cf1d176d-2d57-435e-8e7f-abba14de821c" Language="1033">

        <Media Id="1" Cabinet="SemanticEvolution.cab" EmbedCab="yes" />

        <Property Id="Address" Value="http://127.0.0.1" />

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

            <Directory Id="ProgramFilesFolder">

                <Directory Id="INSTALLLOCATION" Name="Semantic Evolution">

                    <Merge Id="MergeModule" Language="1033" SourceFile="Module.msm" DiskId="1">

                        <ConfigurationData Name="EndpointAddressConfiguration" Value="[Address]" />

                    </Merge>

                </Directory>

           </Directory>

        </Directory>

        <Feature Id="SemanticEvolutionFeatures" Title="Semnatic Evolution" Level="1">

            <Feature Id="TestFeature" Title="TestFeature" Level="1">
                <MergeRef Id="MergeModule" />
            </Feature>

        </Feature>

        <UI Id="CustomWixUI">

            <UIRef Id="WixUI_FeatureTree" />

            <DialogRef Id="ConfigurationDlg" />

            <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="ConfigurationDlg">LicenseAccepted = "1"</Publish>
            <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="ConfigurationDlg">NOT Installed</Publish>

        </UI>

    </Product>

</Wix>

Вот фрагмент модуля слияния:

<Configuration Name="EndpointAddressConfiguration" Format="Text" />

<Substitution Table="CustomAction" Row="SetEndpointAddress" Column="Target" Value="[=EndpointAddressConfiguration]" />

<CustomAction Id="SetEndpointAddress" Property="EndpointAddress" Value="[EndpointAddress]" />

<InstallExecuteSequence>
  <Custom Action="SetEndpointAddress" Before="LaunchConditions">1</Custom>
</InstallExecuteSequence>

В конечном итоге в модуле слияния настроенное свойство используется следующим образом:

<util:XmlFile Id="EndpointAddress" Action="setValue" ElementPath="/configuration/system.serviceModel/client/endpoint/@address" File="[#Se.Gui.exe.config]" Value="[EndpointAddress]/ApiDataService"/>

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Для доступа к свойству из модуля слияния необходимо добавить идентификатор модуля слияния к имени свойства.Что-то вроде: MyProp.msm_guid

http://msdn.microsoft.com/en-us/library/aa370051(VS.85).aspx

1 голос
/ 21 сентября 2011

Помните, что открытые свойства должны быть в верхнем регистре.

Вы можете найти ответ здесь: http://windows -installer-xml-wix-toolset.687559.n2.nabble.com / Попутный-свойства-к-слияния-модулей-td5417112.html

...