【问题标题】:Wix msi updated property value not working during installationWix msi 更新的属性值在安装期间不起作用
【发布时间】:2020-06-11 16:13:20
【问题描述】:

在 Visual Studio 中使用 Wix。我在 wxs 文件的 Product 节点中定义了一个公共属性。

<Property Id="MYPROP" Value="123456789"/>

属性值作为命令行参数传递给延迟的自定义操作可执行文件。我也可以在 exe 中接收它。问题是即使我使用 vbs 更新属性(也通过 vbs select 验证),当我启动 msi 时,它仍然将默认/原始值 (123456789) 传递给自定义操作可执行文件。

还尝试了 msiexec.exe /i myinstaller.msi MYPROP=SomeOtherValue

我仍然看到原始值。怎么了?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    也许先试试这个简单的东西:

    <Property Id="MYPROP" Secure="yes" Value="123456789"/>
    

    基本上,您需要向 SecureCustomProperties 列表中添加一个属性,以使它们在安全桌面环境中正确传递到延迟模式。

    See more information on SecureCustomProperties here。由于 Windows 的变化,这里的技术细节有些变化,所以请先尝试一下 - 可能还有其他几个原因。

    你如何使用这个属性?它有什么作用?

    【讨论】:

      【解决方案2】:

      运行 msi 时,Windows 将 msi 文件缓存在 %windows%\Installer 文件夹中。当该 msi 再次运行时,Windows 会检查缓存中是否存在具有相同 PackageCode 的 msi,如果存在,则使用缓存的 msi 文件。

      PackageCode:标识每个 unqiue msi 安装程序包 - 即使它只有不同的属性。

      简而言之,当使用 vbscript 等更新属性时,也必须更新 PackageCode。这样可以保证更新msi后,相同的msi可以在同一个系统上使用,windows不会使用缓存的msi。

      【讨论】:

      • 所以问题是您使用硬编码到每个包中的相同包代码? This is one "gotcha" of MSI。永远不要硬编码包代码 - 将其设置为自动生成(因为它应该是唯一的)。 WiX允许硬编码的事实必须是为了测试目的吗? I have written about this before。将某些东西视为“定义相同”是肯定存在的……但技术有其怪癖。正如您所说,它基本上是强制从缓存的数据库中强制运行的。
      • 包代码没有硬编码,但是,我试图通过 vbscript 更新属性来使用相同的 msi 文件。它会第一次工作,但随后使用旧值,这让我很失望。最终证明是 msi 缓存,现在我每次更新属性时都会更新包代码。部分问题在于 msi 本身就是一个完整的世界,所以对于像我这样的新手来说,会遇到很多问题
      • 有没有办法阻止 Windows 使用缓存的 msi 和/或根本不缓存 msi?我注意到每次更改属性并运行 msi 时,windows 都会将 msi 文件复制到 %windows%\Installer 文件夹 - 导致 msi 的许多副本
      • 不,它是技术的核心部分。你在测试什么?只需更改 MSI,卸载现有安装,然后重新安装。当您启动修改后的副本时,您可以通过更改 MSI 中的产品代码来阻止 MSI 从缓存中成功运行。然后 MSI 将将您的 MSI 视为与已安装的相同,并显示“已安装此产品的不同版本”。卸载已安装的版本并使用更改后的产品代码再次运行 MSI - 现在它将随您的更改一起安装。
      • 请注意,在多次失败的测试后系统可能处于脏状态。如果是这样的话,试试虚拟?还是另一个盒子?总体而言:避免对 MSI 进行后处理。更改源代码并重新编译。您对 MSI 构建后做了哪些更改?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 2014-10-22
      • 2023-04-10
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多