问题描述
我现在遇到奇怪的错误。
我有一个完美运行的包项目(称为包 A),现在我正在处理从包 A 再次创建的包。(调用这个新包 B)
即使先决条件 exe 没有改变,也没有改变
错误代码本身是 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 package installed per user(Installation Context
和属性:MSIINSTALLPERUSER
、ALLUSERS
)。然后它可能会缓存在您指定的每个用户位置(用户配置文件)中。
这是对每个用户安装的软件包资产的快速扫描。只需保存到桌面并运行(例如 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。自动突出显示表格单元格内容并将范围整数转换为“机器”或“用户”安装。