2012-06-28 17 views
13

Creé un proyecto WIX en Visual Studio 2010 hace más de un año. Crea un archivo MSI y un archivo bootstrapper setup.exe. En realidad, crea ese par de archivos para dos idiomas: inglés y francés. Ahora mismo estoy integrando este proyecto en nuestras compilaciones de TFS CI. Tengo problemas para obtener la compilación CI para generar los archivos bootstrapper setup.exe.Creación de bootstrap WIX 3.6 localizados.

Recientemente hemos actualizado Wix en todos nuestros servidores de compilación a Wix 3.6 RC. Entonces, pensé en darle una oportunidad a Burn en lugar de usar el viejo estilo de bootstrapper. Agregué un nuevo proyecto Bootstrapper a mi solución. El proyecto bootstrapper incluye un paquete simple.wxs que simplemente carga el MSI generado por mi antiguo proyecto MSI. Sin embargo, cuando intento de construir me sale el siguiente error:

error LGHT0103: The system cannot find the file 'C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\fr-fr\LaunchPad.msi;C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\en-us\LaunchPad.msi'.

Mi referencia paquete en el paquete se parece a esto:

<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" /> 

LaunchPad.Wix es el nombre del proyecto Wix MSI. Si cambio el proyecto LaunchPad.Wix para construir solo un idioma, entonces funciona bien. Me parece que el tipo de proyecto bootstrapper simplemente no admite la construcción de archivos de configuración para varios idiomas. ¿Es esto cierto? ¿Alguna sugerencia para una solución alternativa?

Editar

Tras realizar investigaciones adicionales, que se preguntan si los proyectos Bootstrapper incluso soporte de localización. Intenté configurar mi proyecto Wix MSI para crear solo fr-fr. El setup.exe que mi proyecto bootstrapper creó con inglés. Cuando edito las propiedades del proyecto para el proyecto de arranque, el campo "Culturas para construir" está bloqueado y en blanco. ¿Cómo construiría un bootstrapper no inglés? ¿Es esto posible todavía?

+0

Hay un ejemplo de localización de bootstrapper - con código fuente - en este proyecto CodePlex: https://classicwixburntheme.codeplex.com/ –

Respuesta

20

hay varias cosas que hacer aquí:

  1. Si utiliza varias culturas, no se puede utilizar TargetPath en algo fuera de MSBuild que espera un único nombre de archivo. Como encontró, TargetPath es una lista de los archivos localizados que se construyeron. Sin embargo, puede utilizar TargetPath si reúne los requisitos idioma de salida del paquete .msi: <MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />

  2. Si desea crear un programa previo que puede instalar cualquiera/ambos en Estados Unidos, y fr-FR, que necesita para enumerar cada uno Paquete .msi por separado en su propio elemento MsiPackage.

  3. Si desea crear dos bootstrappers, uno en-US y uno fr-FR, necesitará invocar el programa de arranque .wixproj dos veces, una para cada idioma. Bootstrappers no admite el truco de Cultures: es problemático producir dos resultados a partir de una sola invocación de MSBuild (testigo del problema de TargetPath).

Si está utilizando WixStandardBootstrapperApplication, automáticamente trata de localizar la interfaz de usuario basada en el idioma de la interfaz de usuario, cayendo de nuevo a la interfaz de usuario del sistema, y ​​finalmente volver a caer al Inglés. Se busca cadenas localizadas en directorios nombrados después de la LCID, por lo que tendría cargas útiles de esta manera:

<Payload Name="1033\thm.wxl" SourceFile="..." /> 
<Payload Name="1036\thm.wxl" SourceFile="..." /> 

Por desgracia, las cadenas WixStandardBootstrapperApplication Actualmente disponible sólo para las operaciones en los Estados Unidos. Es por eso que un programa de arranque fr-FR muestra UI en inglés. Tendría que localizar el archivo fuente de WiX HyperlinkTheme.wxl o RtfTheme.wxl (dependiendo del tema que use). Ambos archivos están en src \ ext \ BalExtension \ wixstdba \ Resources.

+0

Nuestros paquetes de instalación en-US y fr-FR son idénticos excepto por las cadenas WIX UI. Me acabo de dar cuenta de que el instalador de grabación no muestra la interfaz de usuario de MSI en absoluto. ¿Hay alguna manera de hacer que bootstrapper use la interfaz de usuario de MSI en lugar de la interfaz de usuario quemada? De ser así, podría crear dos proyectos, uno para cada MSI (en-US y fr-FR). Parece que mi otra opción sería un solo iniciador. Crearía la interfaz de usuario en burn (con traducciones en-US y fr-FR). Burn mostrará la traducción correcta en función de la configuración de idioma del sistema operativo del usuario. ¿Eso suena bien? –

+0

Derecha. Si localizas el bootstrapper, necesitarías solo un .msi. O puede ir un paso más allá y mover el código a un .msi y recursos localizados a un .msi por idioma. No le ahorraría mucho con solo dos idiomas, pero trabajé en productos que incluían una docena de idiomas y ahorró espacio y parches simplificados, ya que generalmente usa código de parche y no recursos. –

+0

Quiero crear un bootstrapper que pueda instalar en-US/fr-FR/ko-KO/th-TH/ar-SA/el-GR que detecta automáticamente el idioma actual del sistema, luego traduce las cadenas de interfaz de usuario al sistema Lenguaje ¿Cómo puedo lograrlo? En bootstrapper hay una etiqueta, atributo WixStandardBootstrapperApplication/@ LocalizationFile, que debe elegirse manualmente, ¿cómo puede seleccionarla automáticamente según el idioma del sistema? –

4

bueno. funciona como dijo Bob Arnson.

pero debe prestar atención al nombre y al SourceFile de la carga útil.

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
     <Payload Name="2052\thm.wxl" SourceFile="2052\thm.wxl" /> 
</BootstrapperApplicationRef> 

si cambia el nombre a otro. el bootstrapper no será localizado.

Cuestiones relacionadas