4

我想从 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 

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

4

3 回答 3

4

Windows 安装程序文档指出 .ini 文件必须存在于默认的 Microsoft Windows 目录中。

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

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

于 2009-07-29T02:19:16.167 回答
4

我知道这是一个旧线程,但我希望能拯救某人摆脱我所经历的同样痛苦......

这确实从 ini 文件中读取了一个,至少就我对 Wix3.5 和 3.6 beta 的测试而言。IE

<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!正确位置(即 c:\Windows\some.ini)中的 ANSI 编码 .ini 文件将起作用。

只是不读取 UTF8 文件,没有发生错误,只是没有发生属性分配。

于 2011-12-23T11:49:28.020 回答
0

在 DTF 自定义操作中尝试此操作: C# 中的 INI 文件读取器

于 2009-07-29T15:24:05.200 回答