【问题标题】:Installshield Patching XML File Changes with User Input ValuesInstallshield 使用用户输入值修补 XML 文件更改
【发布时间】:2011-02-08 14:26:43
【问题描述】:

我正在使用 InstallShield 2010 为我的产品创建补丁。有很多变化,所以我使用补丁设计视图来创建一个 MSP 补丁,以区分我的原始产品版本 MSI 和当前 MSI。我的安装程序使用 XML 文件更改 InstallShield 功能在安装期间写入 XML 文件值。一些写入的值是在安装期间通过自定义对话框收集的。我的问题是,在应用补丁时,这些值为 NULL,因为在 MSP 补丁安装期间没有显示用户对话框。发生的情况是,由于这些值不是从用户输入中填充的,因此 MSP 会将空白值放入 XML 中,这实际上会删除用户在初始安装期间指定的值。我可以在补丁中添加对话框,以便在补丁安装期间从用户那里重新收集必要的值吗?

我在想的一件事是编写一个引导程序批处理脚本并通过在 PROPERTY="VALUE" 庄园中的 msiexec.exe 调用传递属性值,但我希望能找到一些替代方案。

【问题讨论】:

    标签: xml properties windows-installer installshield


    【解决方案1】:

    通常,您应该让搜索将当前值读入属性。您可能可以使用 InstallShield 中的 XML 系统搜索支持来执行此操作,或者您可能必须编写自定义操作。 (XML 系统搜索支持不像 XML 文件更改那样处理命名空间)。

    一旦您将此更改构建到升级的安装程序和补丁程序中,您的补丁程序应该在运行 XML 更改之前同样运行这些搜索。在完整的 UI 维护方案中,这可能有利于显示为已填充的默认值,但也要确保这一点。

    【讨论】:

    • 啊没想到重新搜索我的 XML 文件。这是个好主意。我会试一试,谢谢!
    • 那我会做得更好。将 XML 读入 PROPTEMP 并有一个 Type 51 自定义操作,仅当 PROPREAL 没有值时才将其分配给 PROPREAL。这可以确保您能够在命令行中传递 PROPREAL=FOO 并且它不会被 XML 搜索清除。这是被记住但可覆盖的属性模式。
    • Michael,不幸的是,重新搜索我的 XML 文件以查找用户定义的属性将不起作用,因为某些属性是 XML 节点值的子字符串,例如http://[USERDEFINED]/website。看来我现在唯一的选择是编写自定义代码来解析预安装的 XML 字段值,或者找到一种方法让我的自定义对话框在补丁安装期间显示。
    • 您总是可以以其他方式记住这些属性,例如直接序列化为注册表中的值,这样更容易搜索。但是,这会以实现复杂性为代价换取可能不同步的重复数据,而且这两种选择都不可取。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多