Wix:将对话控制值传递给可配置的合并模块



我在使用Wix Toolset完成任务时遇到了麻烦。特别是,我有一个场景,其中我有一个配置MSM(可配置模块)的MSI。MSI有一个自定义UI对话框,用户输入将用于配置MSM。

当我尝试使用地址属性的硬编码值配置MSM时,如下所示,它工作正常,MSM配置正确。(我相信这种配置发生在构建时而不是运行时——问题可能在那里)。

当我使用自定义对话框在安装时(即运行时)设置地址属性的值时,会出现问题。可配置模块仍然使用硬编码的值,而不是用户输入。出现问题是因为合并模块配置仅在构建时完成。是否有一种方法可以从主MSI的UI传递一个值到合并模块?

这里是一个过度简化的版本:

<?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>

下面是merge模块的一个片段:

<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>

最终在merge模块中配置的属性如下所示:

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

请记住,公共属性必须是大写的。

你可以在这里找到答案:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Passing-properties-to-merge-modules-td5417112.html

要访问合并模块中的属性,必须将合并模块id附加到属性名称后。MyProp.msm_guid

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

相关内容

  • 没有找到相关文章

最新更新