我想在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”。
答案 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#