2011-09-08 19 views
7

Tengo un requisito donde debo mostrar el acuerdo de licencia según el idioma del sistema operativo. Los acuerdos de licencia localizados (.rtf) se mantienen en un servidor.WIX: cómo cambiar el acuerdo de licencia durante la instalación

He creado una acción personalizada para detectar el idioma del sistema operativo y descargar el acuerdo de licencia respectivo, pero ¿cómo puedo mostrar el acuerdo de licencia localizado en el cuadro de diálogo del contrato de licencia?

Tengo todos los archivos de configuración de diálogo (.wxs). Estoy usando el conjunto de diálogo Wix_Minimal.

He intentado cambiar las siguientes líneas en 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> 

a

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

pero, no aparece nada en el texto del acuerdo de licencia.

¿Cómo puedo establecer este texto?

+0

No creo que sea posible. Pero puedo pensar en un truco: poner un GUID como texto; cuando se muestre el cuadro de diálogo de licencia, programe una acción personalizada que encuentre el [control de edición] (http://msdn.microsoft.com/en-us/library/aa371540.aspx) y alimente el archivo RTF que descargó en él. Este enfoque no es confiable, pero puedes intentarlo. –

Respuesta

-2

Puede tener una variable de sesión, por ejemplo, LOCLICENSEFILEPATH, que contendrá la ruta al archivo de licencia según la localización. Entonces en el Control simplemente necesitas pasar esta variable.

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

Cuando compilo, obtengo '[LOCLICENSEFILEPATH]' no encontrado –

+0

Primero debe definir la variable 'LOCLICENSEFILEPATH'. Ejemplo: '' –

+0

que lo hice, pero todavía –

3

Desafortunadamente el contrato de licencia sólo es un archivo en tiempo de compilación - una vez que el MSI se construyó el RTF está incrustado en formato de texto como un valor en la tabla Control. (Se puede ver esto utilizando Orca)

Lo que esto significa es que el objeto de actualizar este control de forma dinámica, su acción (s) a medida tendrá que hacer lo siguiente:

  • Descargar el archivo RTF
  • Lea la RTF en una variable de cadena
  • Sustituir el valor de la tabla MSI relevante con algo como esto:
    • 'UPDATE Control SET Text='" & sRTFText & "' WHERE Dialog_='LicenseAgreementDlg' AND Control='LicenseText'

Una solución más fácil sería incluir todos los idiomas en el mismo archivo RTF :)

+2

Hmm, de acuerdo con MSDN, "acciones personalizadas no puede modificar los datos persistentes en una base de datos" : http: //msdn.microsoft.com/en-us/library/aa370519.aspx ... por lo que el punto # 3 no funcionará –

+0

Intenté ver un ejemplo de msi en orca, pero en la propiedad de texto en LicenseArregment el control estaba vacío –

Cuestiones relacionadas