使用WiX获取INI文件值

时间:2009-07-28 09:54:10

标签: wix wix3 ini

我想在WiX安装程序中读取INI文件中的值。我刚刚尝试使用IniFileSearch,但这会查找INI文件或INI文件中指定的路径(文档不清楚),它不会从INI读取值文件。

我需要习惯这样做吗?如果是这样,人们会建议什么?如果WiX没有这个,那似乎很奇怪!

我正在使用的代码:

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

INI文件:

[ServicePack] 
Version=1 

我尝试过使用和不使用目录和文件搜索(使用'name'中的完整路径),我尝试过type =“raw”,“file”和“directory”。

3 个答案:

答案 0 :(得分:4)

Windows Installer documentation表示.ini文件必须存在于默认的Microsoft Windows目录中。

由于FileSearch和DirectorySearch是有效的WiX孩子,这有点令人困惑,但我相信这是为了搜索 INI文件本身中指定的文件或目录。您会注意到您可以在INI文件中搜索的三种类型的值是目录,文件和原始。

这是Windows Installer的限制,而不是WiX的限制。如果未指定路径,则用于读取INI文件的Microsoft接口(例如GetPrivateProfileString)将在Windows文件夹中查找。我想Windows Installer团队决定不简化,只支持Windows文件夹中的INI文件,不允许动态路径。

答案 1 :(得分:4)

我知道这是一个老线索,但我希望能够避免让我遇到同样痛苦的人....

这确实从ini文件中读取,至少到目前为止我使用Wix3.5和3.6 beta进行了测试。即。

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

将相应的ini文件保存在C:\ windows \ myConfigFile.ini(Windows 7)中:

[section1]
name=testing

然而,在我意识到ini文件必须 ANSI 而不是UTF8之前,我花了很多时间试图弄清楚为什么这似乎不起作用!正确位置的ANSI编码.ini文件,即c:\ Windows \ some.ini将起作用。

UTF8文件只是没有被读取,没有错误发生,属性赋值就不会发生。

答案 2 :(得分:0)

在DTF自定义操作中尝试此操作: INI File Reader in C#