2011-09-08 49 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,但在許可協議控制的文本屬性中爲空 –