Pregunta

Me gustaría leer un valor de un archivo INI en un instalador WIX. Acabo de intentar usar INFILESEARCH, pero esto busca un archivo INI o una ruta especificada en un archivo INI (la documentación no está clara), no lo hace. Leer un valor de un archivo ini.

¿Necesito una costumbre para hacer esto? Y si es así, ¿qué sugeriría la gente? ¡Sin embargo, parece muy extraño si Wix no tiene esto!

Código que estoy usando:

<Property Id="SP">
    <IniFileSearch Id="SearchSPVersion" Name="sp.ini" Section="ServicePack"
    Key="Version" Type="raw">
        <DirectorySearch Id="SPIniFilePath" Path="[CFGPATH]">
            <FileSearch Id="SPIniFile" Name="sp.ini"/>
        </DirectorySearch>
    </IniFileSearch>
</Property>

Archivo INI:

[ServicePack] 
Version=1 

He intentado con y sin el directorio y la búsqueda de archivos (usando la ruta completa en 'name'), y he probado type = "raw", "archivo" y "directorio".

¿Fue útil?

Solución

Prueba esto en una acción personalizada DTF:Lector de archivos INI en C#

Otros consejos

los Documentación del instalador de Windows establece que el archivo .ini debe estar presente en el directorio predeterminado de Microsoft Windows.

Es un poco confuso, ya que FileSearch y DirectorySearch son niños WIX válidos, sin embargo, creo que esto es para buscar un archivo o directorio especificado dentro de el archivo ini en sí. Notará que los tres tipos de valores que puede buscar dentro de un archivo INI son directorio, archivo y raw.

Es una limitación del instalador de Windows, no de Wix. Las interfaces de Microsoft para leer archivos INI (por ejemplo, GetPrivateProfilEdring) se ve en la carpeta de Windows si no se especifica una ruta. Supongo que el equipo de instalador de Windows decidió no simplificar las cosas y solo admite archivos INI en la carpeta de Windows al no permitir una ruta dinámica.

Sé que este es un hilo viejo, pero esperaba salvar a alguien del mismo dolor que pasé ...

Esto lee un valor Desde un archivo INI, al menos tan lejos como mis pruebas con WIX3.5 y 3.6 beta. es decir

<Property Id="MY_PROPERTY">
        <IniFileSearch Id="myIniSearch" Name="myConfigFile.ini" Section="section1" Key="name" Type="raw" />
    </Property>

    <Condition Message="myconfigfile not def.">MY_PROPERTY</Condition>

Con el archivo INI correspondiente guardado en c: windows myconfigfile.ini (Windows 7):

[section1]
name=testing

Sin embargo, quemé muchas horas tratando de averiguar por qué esto parecía no funcionar antes de darme cuenta de que el archivo ini debe ser Ansi ¡Y no UTF8! Un archivo .ini codificado ANSI en la ubicación correcta, es decir, C: Windows Some.ini funcionará.

Los archivos UTF8 simplemente no se leen, no se produce error, la asignación de propiedades simplemente no ocurre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top