【问题标题】:WIX: how to change license agreement during installationWIX:如何在安装过程中更改许可协议
【发布时间】:2011-09-08 16:35:57
【问题描述】:

我有一个要求,我需要根据操作系统语言显示许可协议。本地化许可协议 (.rtf) 保存在服务器上。

我创建了一个自定义操作来检测操作系统语言并下载相应的许可协议,但是如何在许可协议对话框中显示本地化的许可协议?

我有所有的对话框集文件 (.wxs) 。我正在使用Wix_Minimal 对话框集。

我尝试在WelcomeEulaDlg.wxs中更改以下行

<Control Id="LicenseText" Type="ScrollableText" X="130" Y="36" Width="226" Height="162" Sunken="yes" TabSkip="no">
   <Text SourceFile="!(wix.WixUILicenseRtf=$(var.licenseRtf))" />
</Control>

<Control Id="LicenseText" Type="ScrollableText" X="130" Y="36" Width="226" Height="162" Sunken="yes" TabSkip="no" Text="[MyPropertyConatingRTFData]">
</Control>

但是,许可协议文本中没有显示任何内容。

如何设置此文本?

【问题讨论】:

  • 我认为这不可能。但我可以想到一个技巧:将 GUID 作为文本;当许可证对话框显示时,安排一个自定义操作,找到edit control 并将您下载的 RTF 输入其中。这种方法不可靠,但你可以试试。

标签: licensing wix wix3.5


【解决方案1】:

不幸的是,许可协议只是构建时的一个文件——一旦构建了 MSI,RTF 就会以文本格式嵌入为Control 表中的值。 (您可以使用 Orca 查看此内容)

这意味着为了动态更新此控件,您的自定义操作将需要执行以下操作:

  • 下载 RTF 文件
  • 将 RTF 读入字符串变量
  • 将相关 MSI 表中的值替换为以下内容:
    • 'UPDATE Control SET Text='" &amp; sRTFText &amp; "' WHERE Dialog_='LicenseAgreementDlg' AND Control='LicenseText'

一个更简单的解决方案是在同一个 RTF 文件中包含所有语言 :)

【讨论】:

  • 嗯,根据 MSDN,“自定义操作无法修改数据库中的持久数据”:msdn.microsoft.com/en-us/library/aa370519.aspx... 所以第 3 点不起作用
  • 我尝试在 orca 中查看示例 msi,但 licenseagreement 控件中的 text 属性为空
【解决方案2】:

您可以有一个会话变量LOCLICENSEFILEPATH,它将包含基于本地化的许可证文件的路径。所以在 Control 中你只需要传递这个变量。

<Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="140" Sunken="yes" TabSkip="no">
    <Text SourceFile="[LOCLICENSEFILEPATH]" />
</Control>

【讨论】:

  • 编译时得到[LOCLICENSEFILEPATH] not found
  • 必须先定义变量LOCLICENSEFILEPATH。示例:&lt;Property Id="LOCLICENSEFILEPATH" Value="Licenses\Text.rtf"/&gt;
猜你喜欢
  • 2011-05-10
  • 2021-08-30
  • 2011-05-06
  • 2014-08-04
  • 1970-01-01
  • 2014-03-20
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多