2011-09-08 45 views
7

我有一个要求,我需要根据操作系统语言显示许可协议。本地化许可协议(.rtf)保存在服务器上。WIX:如何在安装期间更改许可协议

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

我有所有的对话框文件(.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> 

,但是,没有任何许可协议文本显示出来。

如何设置此文字?

+0

所有的语言,我不认为这是可能的。但我可以想到一个黑客:把一个GUID作为文本;当显示许可证对话框时,安排一个自定义操作,查找[编辑控件](http://msdn.microsoft.com/zh-cn/library/aa371540.aspx)并将您下载的RTF提供给它。这种方法不可靠,但您可以尝试。 –

回答

-2

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

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

当我编译时,我得到'[LOCLICENSEFILEPATH]'找不到 –

+0

您必须首先定义变量'LOCLICENSEFILEPATH'。 例如:''' –

+0

我做到了,但仍然 –

3

可惜许可协议仅仅是在编译的时候文件 - 一旦MSI是建立在RTF嵌入文本格式作为Control表中的值。 (您可以查看此使用ORCA)

这意味着,为了动态地更新该控件,您的自定义操作(一个或多个),就需要做到以下几点:

  • 下载RTF文件
  • 阅读RTF到一个字符串变量
  • 像这样的东西替换相关的MSI表中的值:
    • 'UPDATE Control SET Text='" & sRTFText & "' WHERE Dialog_='LicenseAgreementDlg' AND Control='LicenseText'

更简单的解决办法是包括在同一个RTF文件:)

+2

嗯,根据MSDN的说法,“自定义操作无法修改数据库中的持久数据” :http://msdn.microsoft.com/en-us/library/aa370519.aspx ...所以点#3将无法工作 –

+0

我试着查看示例msi in orca,但在许可协议控制的文本属性中为空 –