使用 WIX 根据组合框选择动态更改许可证 RTF 文件

Dynamically changing License RTF file based on combobox selection using WIX

我们正在使用 WIX [Windows 安装程序 XML] 构建 MSI,我们不关心 UI 按钮或 MSI 中的文本本地化,这是我唯一想要的要翻译的是安装程序第二页或第三页中出现的许可证文本。从用户的角度来看,最简单的方法是有一个组合框,他可以在其中选择语言并更改下面的许可文本字段。

      <Control Id="LanguageComboBox"
             Type="ComboBox"
             Sorted="yes"
             ComboList="yes"
             Property="LANGUAGE"
             X="86"
             Y="52"
             Width="200"
             Height="15">
      <ComboBox Property="LANGUAGE">
        <ListItem Text="English"
                  Value="IT_Upgrade_Mgr_October_2015_FINAL_en-us"/>

   Setting up License text:
        <Control Id="LicenseText"
             Type="ScrollableText"
             Property ="EULATEXT"
             X="20"
             Y="75"
             Width="330"
             Height="125"
             Sunken="yes"
             TabSkip="no">
      <Text SourceFile="EULA\[LANGUAGE].rtf" />

我设法通过引入组合框来修改现有的安装程序,但我很难为更改语言触发事件,它应该会自动更改 EULA,我总共有 18 个不同的 EULA RTF 文件用于不同的语言。 组合框事件: 正在使用组合框及其设置发布 [LANGUAGE] 属性 属性。

更新: 我可以使用 Query 编写自定义操作,但它不起作用? view = session.Database.OpenView("UPDATE Control SET Text='" + sRTFText + "' WHERE Dialog_='LicenseAgreementDlg' AND Control='LicenseText'"); view.Execute();

由于可滚动文本不采用动态值并且只能在构建时更改,唯一的解决方案是使用 运行 会话对象的 DTF 更新 MSI ttables,如果您的团队这样做了请告诉我任何与此类似的东西。

更新表格(可能很久以前就有人读过,因此更新它们不太可能有帮助)。而是创建多个 ScrollableText 控件,每种语言一个,每个都有一对 hide and show Conditions 动态隐藏除所选语言之外的所有控件。

能够通过自定义操作解决问题:

//reading the License text from control table

 var view = session.Database.OpenView("SELECT * FROM Control WHERE Dialog_='LicenseAgreementDlg_loc' AND Control='LicenseText'");
 view.Execute();
 var record = view.Fetch();

 view.Delete(record);

 //adding new record with new value
 record.SetString("Text", sRtfText);

 view.Modify(ViewModifyMode.InsertTemporary, record);