微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WiX 工具集的刻录何时使用 C:\ProgramData\Package Cache\ vs C:\Users\...\AppData\Local\Package Cache?

如何解决WiX 工具集的刻录何时使用 C:\ProgramData\Package Cache\ vs C:\Users\...\AppData\Local\Package Cache?

我现在遇到奇怪的错误

我有一个完美运行的包项目(称为包 A),现在我正在处理从包 A 再次创建的包。(调用这个新包 B)

即使先决条件 exe 没有改变,也没有改变 代码,但在安装包 B 的先决条件的过程中开始出现错误

错误代码本身是 0x800702e4,但我认为原因不是海拔问题。 我比较了二进制文件(使用 winmerge)并确认 exe 是相同的。

我在 bundle .log 中发现的主要区别是文件可用的路径。

在bundle A中,这个先决条件的路径位于C:\ProgramData\Package Cache

但是,在包 B 中,此先决条件的路径位于 C:\Users\My.User.Name\AppData\Local\Package Cache

我记得以前使用过 ProgramData 的大部分时间。 这怎么会发生? WiX 什么时候决定使用不同的包位置? 我可以修改捆绑代码中的标志以保证 ProgramData 的使用吗?

编辑

只是为了尝试,假设是海拔问题,我添加 然后这个问题就消失了。 现在问题变成了为什么这适用于捆绑包 A?

解决方法

听起来您有 a package installed per userInstallation Context 和属性:MSIINSTALLPERUSERALLUSERS)。然后它可能会缓存在您指定的每个用户位置(用户配置文件)中。

这是对每个用户安装的软件包资产的快速扫描。只需保存到桌面并运行(例如 PackageScan.vbs)。每个用户的每个安装(如果有)都会有一个消息框:

Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")

'On Error Resume Next

Set products = installer.ProductsEx("","",7) 
   
For Each product In products
   'productcode = product.ProductCode 
   name = product.InstallProperty("ProductName")
   'version = product.InstallProperty("VersionString") 
   assignment = product.InstallProperty("AssignmentType")
   
   If (assignment = 0) Then
      MsgBox "Found per user installation. The product name is: " & vbNewLine & vbNewLine & name
   End If
Next

'On Error GoTo 0

 Msgbox "Done."

Here is a script to create a HTML export of the package estate。它没有上述分配信息,但很容易添加。让我补充一下。 New version here

更新:截至 2021 年 4 月 16 日,还有 here is the latest version。自动突出显示表格单元格内容并将范围整数转换为“机器”或“用户”安装。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。