【问题标题】:Identify command line an MSI was installed with识别安装 MSI 的命令行
【发布时间】:2013-10-17 14:38:51
【问题描述】:

是否可以识别 MSI 是使用哪个命令行安装的?

例如,我在 MSI installatin 命令行中传递了一些自定义属性。 msiexec /i msi1.msi CUSTOMPROPERTY1="帮帮我!"

一段时间后,我想用 msi2.msi 更新 msi1.msi,并希望将相同的自定义属性传递给 msi2.msi 安装命令行。

命令行是否存储在任何地方?

我看到的方法是在 msi1.msi 中创建一个 reg 键将存储 CUSTOMPROPERTY1 值并在 msi2.msi 中创建一个 AppSearch 条目来搜索此 reg 条目。就我而言,我无法使用这种方法。这就是为什么要寻找其他人。

【问题讨论】:

    标签: windows-installer command-line-arguments


    【解决方案1】:

    高级安装程序还可以帮助您使用 Set persistent property 选项。更新时您无需调用或搜索这些属性,它们的自定义值会自动从注册表中获取。

    干杯

    【讨论】:

    • 谢谢,但可以使用任何免费的 MSI 编辑器完成,无需购买高级安装程序。在 Orca 或 InstEd 中,这将需要大约 1 分钟来创建具有注册表项的组件,将其分配给某些功能并创建 AppSearch 记录。如果您再次阅读我的帖子,您会发现我没有在选择打包软件时寻求建议。问题是关于识别安装 MSI 的命令行。
    • 很高兴知道。多年来,我一直希望 InstallShield 能够实现此功能。
    • 是的,Flexera 在这方面的愿景太先进了 :)
    【解决方案2】:

    正确。 Windows Installer 不会为后续事务保留属性,因此您必须自己进行。这是一篇关于它的博客:

    The WiX toolset's "Remember Property" pattern.

    就个人而言,上述模式还远远不够。我所做的是将注册表值读入第二个属性,然后使用一系列有条件的自定义操作来仅在适当的情况下填充主值。目标是按照以下从高到低的顺序强制执行属性优先级:

    1. 用户通过 UI 序列中对话框上的自定义控件输入的值。
    2. 通过命令行传递给安装程序的值。
    3. 以前安装的值仍然存在。
    4. 在 MSI 中烘焙的默认值。

    【讨论】:

    • 看过文章。它描述了我写过的相同方法。因此,在我的情况下,唯一的解决方案是创建存储自定义属性值的注册表项,并使用内置 AppSearch 机制获取它。不是吗?
    • 或 INI 或 XML 或其他地方。就个人而言,我发现为每个属性实现此功能很乏味,因此我编写了由名为 PersistedProperties (PersistedProperties=SVCUSERNAME;SVCPASSWORD ) 的属性驱动的自定义操作(SaveProperties 和 LoadProperties),我还在自定义操作中添加了一些加密逻辑。跨度>
    • 这是有道理的。您能否分享识别属性的机制是在命令行中传递还是位于 MSI/MST 中?我实际上不需要完整的 vbs 列表,只是一个想法。
    • 读取注册表 -> TEMPPROP 设置 PROP = TEMPPROP 条件 PROP 为空。设置 PROP = DEFAULTPROP 条件 PROP 为空。 UI 和执行序列的计划“只运行一次”。诸如此类。
    猜你喜欢
    • 2021-11-21
    • 2017-10-30
    • 2011-06-03
    • 1970-01-01
    • 2017-01-22
    • 2018-04-26
    • 2020-12-16
    • 2016-02-28
    • 1970-01-01
    相关资源
    最近更新 更多