InstallShield Basic MSI系统搜索不适用于xml文件

时间:2016-10-17 18:07:01

标签: xml windows-installer installshield

我试图在升级时将XML文件中的值重新读入我的Installshield Basic MSI项目,因为它总是坚持用默认值覆盖通过xml文件更改修改的XML文件。当我进入“系统搜索”屏幕时,我通过系统搜索向导添加一个新的XML文件值。然后我输入exe.config文件的文件名(下面的内容),我指定文件安装位置的完整路径,我为XPath输入“/ configuration / appSettings / add [@ key =”UiServiceIpAddress“]”。我让它搜索属性“value”的值,并告诉它将值存储在有效的属性中。

当我运行这个msi时,它似乎什么也没做。在查看我的MSI日志(下面的输出)后,我可以看到AppSearch运行,但它甚至没有提到我的xml appsearch。谷歌搜索后,我想出了如何在我的MSI上运行验证。与之关联的错误为“无效文件名;表:签名,列文件名,密钥:NewSignature1”。文件名对我来说似乎有效。所以我很难过。

Msi日志输出:

Action start 13:21:48: AppSearch.
AppSearch: Property: IEXPLORE, Signature: IEXPLORE_REG.C8C0673E_50E5_4AC4_817B_C0E4C4466990
MSI (c) (80:B0) [13:21:48:597]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (80:B0) [13:21:48:597]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\Internet Explorer\IEXPLORE.EXE' folder path. (mask argument = 0, the folder pair's iSwapAttrib member = 0).
MSI (c) (80:B0) [13:21:48:597]: PROPERTY CHANGE: Adding IEXPLORE property. Its value is 'C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE'.
AppSearch: Property: DOTNETVERSION40FULL, Signature: DotNet40Full
MSI (c) (80:B0) [13:21:48:597]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (80:B0) [13:21:48:597]: PROPERTY CHANGE: Adding DOTNETVERSION40FULL property. Its value is '#1'.
Action ended 13:21:48: AppSearch. Return value 1.

XML文件:

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add value="127.0.0.1" key="UiServiceIpAddress"></add>
    </appSettings>
</configuration>

2 个答案:

答案 0 :(得分:1)

我怀疑您正在使用AppSearch搜索您的XML值,并使用您在上面提供的XPATH表示法将它们分配给属性。

您的MSI的ICE验证显示appsettings.xml文件的格式不正确的文件名。我认为您需要做的就是为您的文件名提供短名称(8.3)格式。

  

示例:FileName = appSettings.xml

     

FileName columnValue = APPSET~1.XML | appsettings.xml

Phil说明MSI本身不支持XML文件搜索,并且InstallShield已经为我们添加了一个自定义操作来管理这个问题。

搜索'ISXmlAppSearch',然后会显示结果。

以下是我的某个安装程序中找不到xml文件的日志文件的结果。

Action start 14:09:17: ISXmlAppSearch.
InstallShield 14:09:18: Searching for the contents of the XML Element using the Element '//brand'.
InstallShield 14:09:18: The location of the XML file, stored in the Property 'SYSTEMSETTINGS1', is currently a NULL value.  It appears that the AppSearch did not find the file.
InstallShield 14:09:18: Searching for the contents of the XML Element using the Element '//maincomputer'.
InstallShield 14:09:18: The location of the XML file, stored in the Property 'SYSTEMSETTINGS', is currently a NULL value.  It appears that the AppSearch did not find the file.
MSI (s) (F0:1C) [14:09:18:199]: Doing action: LaunchConditions
Action ended 14:09:18: ISXmlAppSearch. Return value 1.

这是另一个显示结果,只是让你知道会发生什么:

Action start 9:28:24: ISXmlAppSearch.
MSI (s) (D0!0C) [09:28:24:539]: PROPERTY CHANGE: Adding ISMEDFX property. Its value is 'ac'.
InstallShield 9:28:24: Searching for the contents of the XML Element using the Element '//brand'.
InstallShield 9:28:24: Success! The ISXmlAppSearch action set the value of the associated property to the following value: 'ac'.
MSI (s) (D0!0C) [09:28:24:539]: PROPERTY CHANGE: Modifying MAINCOMPUTER property. Its current value is 'YES'. Its new value: 'yes'.
InstallShield 9:28:24: Searching for the contents of the XML Element using the Element '//maincomputer'.
InstallShield 9:28:24: Success! The ISXmlAppSearch action set the value of the associated property to the following value: 'yes'.
MSI (s) (D0!0C) [09:28:24:539]: PROPERTY CHANGE: Adding STORAGELOCATIONROOT property. Its value is 'p:\program files (x86)\amazing charts\'.
InstallShield 9:28:24: Searching for the contents of the XML Element using the Element '//storagelocationroot'.
InstallShield 9:28:24: Success! The ISXmlAppSearch action set the value of the associated property to the following value: 'p:\program files (x86)\amazing charts\'.
MSI (s) (D0:D8) [09:28:24:555]: Skipping action: MedFxSet (condition is false)
MSI (s) (D0:D8) [09:28:24:555]: Doing action: LaunchConditions
Action ended 9:28:24: ISXmlAppSearch. Return value 1.
  • 要使用InstallShield向导进行设置,我创建了一个新的XML类型系统搜索。

    • 我指定了文件名,在我的情况下是SYSTEM~1.XML | systemsettings.xml。 注意:如果您在此处指定短名称,则向导会提供无效的文件名错误,您必须使用直接编辑以确保您具有有效的文件名。

    • 我将'Look In'值设置为'在上一次搜索中找到的路径:',但只要它是真实路径,您就可以指定任何您想要的内容。我认为这是在成本初始化之前完成的,因此您的INSTALLDIR属性可能不存在,这就是我为安装目录执行AppSearch并使用该选项进行上一次搜索的原因。

    • 我将XPath指定为XML Element。我记得对此感到沮丧,最后我需要指定的是我的特定元素,特别是如果它在xml文件中是唯一的。例如//品牌而非parentelement /品牌

    • 我选择'Look For'选项为'Element of Element',然后将值存储在我稍后可以使用的属性中。

要手动修改文件名,请打开Direct Editor。 导航到签名表 找到您的条目并修改FileName值。

答案 1 :(得分:0)

Windows Installer的AppSearch中没有任何内容可以从Xml文件中提取值。有几种解释:

  1. InstallShield在Windows Installer之外添加了功能,因此他们可能会添加一个内部自定义操作来执行此操作,并且会显示在日志中的其他位置。

  2. 文档在某种程度上与IniLocator功能相混淆,后者将从标准INI文件(不是Xml文件)中提取值。

  3. 另一个答案指出,1。是原因。在日志中搜索ISXmlAppSearch。