Pergunta

Eu gostaria de ler um valor de um arquivo ini em um instalador WIX. Eu apenas tentei usar o IniFileSearch, mas isso procura um arquivo ini ou um caminho especificado em um arquivo ini (a documentação não é clara), ele não Leia um valor de um arquivo ini.

Eu preciso de uma customAction para fazer isso? E se sim, o que as pessoas sugeririam? Parece muito estranho se Wix não tiver isso, no entanto!

Código que estou 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>

Arquivo ini:

[ServicePack] 
Version=1 

Eu tentei com e sem o diretório e a pesquisa de arquivos (usando o caminho completo em 'nome'), e eu tentei digite = "RAW", "FILE" e "Diretório".

Foi útil?

Solução

Experimente isso em uma ação personalizada do DTF:Leitor de arquivos ini em c#

Outras dicas

o Documentação do Windows Installer afirma que o arquivo .ini deve estar presente no diretório Microsoft Windows padrão.

É um pouco confuso, pois o FileSearch e o DirectorySearch são crianças válidas, no entanto, acredito que isso é para procurar um arquivo ou diretório especificado dentro de o próprio arquivo ini. Você notará que os três tipos de valores que você pode pesquisar em um arquivo ini são diretórios, arquivo e bruto.

É uma limitação do instalador do Windows, não do Wix. As interfaces da Microsoft para ler arquivos ini (por exemplo GetPrivateProfilestring) Olhe na pasta do Windows se um caminho não for especificado. Eu acho que a equipe do Windows Installer decidiu não simplificar as coisas e suportar apenas arquivos INI na pasta do Windows, não permitindo um caminho dinâmico.

Eu sei que este é um tópico antigo, mas eu esperava salvar alguém da mesma dor pela qual passei ....

Isso lê um valor De um arquivo ini, pelo menos até os meus testes com WIX3.5 e 3.6 beta. ou seja

<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>

Com o arquivo ini correspondente salvo em c: windows myconfigfile.ini (Windows 7):

[section1]
name=testing

No entanto, queimei muitas horas tentando descobrir por que isso parecia não funcionar antes de perceber que o arquivo ini deve ser Ansi E não UTF8! Um arquivo .ini codificado ANSI no local correto, ou seja, C: Windows algum.ini funcionará.

Os arquivos UTF8 simplesmente não são lidos, nenhum erro ocorre, a atribuição da propriedade simplesmente não acontece.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top