2011-09-21 66 views
2

我在使用Wix工具集完成任務時遇到問題。特別是,我有一個場景,我有一個配置MSM(可配置模塊)的MSI。 MSI有一個用戶輸入用於配置MSM的自定義用戶界面對話框。Wix:將對話控制值傳遞給可配置的合併模塊

當我嘗試使用地址屬性的硬編碼值配置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> 

這裏是合併模塊的一個snipet:

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

回答