使用WiX获取INI文件值

5
我想在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"。


除了安装之外,这个值还在其他地方被使用吗? - Jared
是的。在一个条件下。否则我就不需要得到它。 - Ian Grainger
3个回答

4
Windows Installer文档指出,.ini文件必须存在于默认的Microsoft Windows目录中。
这有点令人困惑,因为FileSearch和DirectorySearch是有效的WiX子元素,但我认为这是为了搜索在INI文件本身内指定的文件或目录。您会注意到,在INI文件中可以搜索的三种类型的值是目录、文件和原始值。
这是Windows Installer的限制,而不是WiX的限制。Microsoft用于读取INI文件的接口(例如GetPrivateProfileString)如果没有指定路径,则会查找Windows文件夹。我猜Windows Installer团队决定不简化事情,只支持位于Windows文件夹中的INI文件,不允许动态路径。

2
好的,那很糟糕,不是吗? - Ian Grainger
嗯,只有在你仍在使用INI文件的情况下才需要这样做。现在你不应该使用注册表吗? - saschabeaumont
a) 它只在 INI 文件中,如果它在注册表中,那我就没问题了。 b) 闲话一下:我不确定微软是否有计划放弃注册表,但作为一个概念,我个人不喜欢它…但这并不是真正重要的。 - Ian Grainger
6
这句话需要翻译为:"这是Windows Installer的限制,而不是WIX的限制。在研究这个问题时,我看到了这个说法多次。更准确地说,这是Windows Installer和WIX都存在的限制。并不是WIX被迫不能扩展Windows Installer所无法实现的功能。" - Michael Hunter
@MichaelHunter 那一定是我读过的最好的评论!它表达了我的看法。 - ferventcoder
@saschabeaumont Windows注册表在网络安装中的工作效果如何? - Andreas

4

我知道这是一个旧的帖子,但我希望能够帮助那些经历了和我一样的痛苦的人......

根据我的Wix3.5和3.6 beta测试,这确实从ini文件中读取了一个值。

<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 文件只是不会被读取,不会发生任何错误,属性赋值就是不会发生。

看了你的例子后,似乎你同意@saschabeaumont所说的INI文件必须存储在Windows目录中。所以基本上Windows强制开发人员在Windows目录中填满它们的INI文件?哦,好吧.... - Andreas

0

提到的路径不可用。这个问题有什么解决方案吗?您能否给出此链接中的解决方案:https://dev59.com/Sa32oIgBc1ULPQZFrvQ2 - user3422209

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接