【问题标题】:Windows Installer "This action is only valid for products that are currently installed" - "MSI_DBG: Provided descriptor less than minimum size"Windows 安装程序“此操作仅对当前安装的产品有效”-“MSI_DBG:提供的描述符小于最小大小”
【发布时间】:2014-03-10 15:11:05
【问题描述】:

我在 Windows 8 机器上运行 WiX 安装程序时遇到了一个奇怪的问题。当我单击 msi 时,我收到消息“此操作仅对当前安装的产品有效”。运行带有日志记录的 msi 会显示以下内容:

=== Verbose logging started: 3/11/2014  9:46:49  Build type: SHIP UNICODE 5.00.9600.00  Calling process: C:\WINDOWS\system32\msiexec.exe ===
MSI (c) (20:C4) [09:46:49:933]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

MSI (c) (20:C4) [09:46:49:934]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

MSI (c) (20:40) [09:46:49:956]: Resetting cached policy values
MSI (c) (20:40) [09:46:49:956]: Machine policy value 'Debug' is 0
MSI (c) (20:40) [09:46:49:956]: ******* RunEngine:
           ******* Product: myinstaller.msi
           ******* Action: 
           ******* CommandLine: **********
MSI (c) (20:40) [09:46:49:976]: Machine policy value 'DisableUserInstalls' is 0
MSI (c) (20:40) [09:46:50:014]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 3: 2 
MSI (c) (20:40) [09:46:50:766]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'E:\myinstaller.msi' against software restriction policy
MSI (c) (20:40) [09:46:50:766]: Note: 1: 2262 2: DigitalSignature 3: -2147287038 
MSI (c) (20:40) [09:46:50:766]: SOFTWARE RESTRICTION POLICY: E:\myinstaller.msi is not digitally signed
MSI (c) (20:40) [09:46:50:778]: SOFTWARE RESTRICTION POLICY: E:\myinstaller.msi is permitted to run at the 'unrestricted' authorization level.
MSI (c) (20:40) [09:46:50:793]: Cloaking enabled.
MSI (c) (20:40) [09:46:50:793]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (20:40) [09:46:50:799]: End dialog not enabled
MSI (c) (20:40) [09:46:50:799]: Original package ==> E:\myinstaller.msi
MSI (c) (20:40) [09:46:50:799]: Package we're running from ==> C:\Users\PATRI_~1\AppData\Local\Temp\50d229a.msi
MSI (c) (20:40) [09:46:50:804]: MSI_DBG: Provided descriptor less than minimum size
MSI (c) (20:40) [09:46:50:807]: APPCOMPAT: Compatibility mode property overrides found.
MSI (c) (20:40) [09:46:50:808]: APPCOMPAT: looking for appcompat database entry with ProductCode ''.
MSI (c) (20:40) [09:46:50:808]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (20:40) [09:46:50:849]: MSCOREE not loaded loading copy from system32
MSI (c) (20:40) [09:46:50:859]: Machine policy value 'TransformsSecure' is 0
MSI (c) (20:40) [09:46:50:859]: User policy value 'TransformsAtSource' is 0
MSI (c) (20:40) [09:46:50:860]: APPCOMPAT: looking for appcompat database entry with ProductCode ''.
MSI (c) (20:40) [09:46:50:860]: APPCOMPAT: no matching ProductCode found in database.
MSI (c) (20:40) [09:46:50:860]: Transforms are not secure.
MSI (c) (20:40) [09:46:50:860]: PROPERTY CHANGE: Adding MsiLogFileLocation property. Its value is 'E:\installlog.txt'.
MSI (c) (20:40) [09:46:50:860]: Command Line: CURRENTDIRECTORY=E:\ CLIENTUILEVEL=0 CLIENTPROCESSID=800 CURRENTMEDIAVOLUMELABEL=? 
MSI (c) (20:40) [09:46:50:860]: PROPERTY CHANGE: Adding PackageCode property. Its value is '{9C098FBE-3C8F-452D-A0C4-B543717B6E3D}'.
MSI (c) (20:40) [09:46:50:861]: Product Code passed to Engine.Initialize:           ''
MSI (c) (20:40) [09:46:50:861]: Product Code from property table before transforms: ''
MSI (c) (20:40) [09:46:50:861]: Product Code from property table after transforms:  ''
MSI (c) (20:40) [09:46:50:861]: Failing install, missing product code
This action is only valid for products that are currently installed.
E:\myinstaller.msi
MSI (c) (20:40) [09:46:50:862]: Note: 1: 1708 
MSI (c) (20:40) [09:46:50:863]: Product:  -- Installation failed.

MSI (c) (20:40) [09:46:50:865]: Windows Installer installed the product. Product Name: . Product Version: . Product Language: . Manufacturer: . Installation success or error status: 1605.

MSI (c) (20:40) [09:46:50:871]: MainEngineThread is returning 1605
=== Verbose logging stopped: 3/11/2014  9:46:50 ===`

奇怪的是,相同的安装程序在 win7 机器上运行良好,而安装程序的稍旧版本在 win8 机器上运行。我不知道为什么产品代码是空的,因为它在 win7 上有一个有效的 guid。

有人知道我为什么会收到这个错误吗?

编辑: 使用 Orca 我可以看到 MSI 的 ProductCode 属性设置为有效的 GUID

EDIT2:通过使用 Orca 将产品代码中的 GUID 与另一个版本的安装程序的 Guid 交换,我可以让它工作,但是当使用 ProductCode='*' 从 WiX 构建时,即使它不工作放入产品代码中的 guid 似乎是有效的。

【问题讨论】:

  • 首先要排除一件事:您可以检查 MSI 和任何先前版本的包 guid 吗?如果它在多个文件中是相同的,MSI 将根据定义将不同的文件作为同一个文件处理 - 可能会导致各种奇怪的问题。
  • Win8系统是否安装了Visual C++ 2010 Redistributable? x86 和/或 x64?
  • 它同时安装了 VC++ x86 和 x64。
  • 只是为了排除它,您可以尝试卸载这两个运行时(x86 和 x64),然后尝试安装您的非工作包吗?如果这解决了问题,我们可能会遇到更大的 Wix / VC2010 运行时 / Windows 8 问题。确定这一点非常重要(问题在于运行时,但表现为 OS / Wix 问题)。

标签: windows-8 wix windows-installer


【解决方案1】:

只是几个建议: 1. 有效的 guid 包括全部大写,所以如果 Windows 8 收紧了规则,请检查。 2. appcompat 覆盖意味着正在发生一些应用程序兼容性问题,例如假装系统是(例如)Windows 7 或 XP 来安装它,因为否则它不会安装在 8 上。或者 Windows 假装那个内部。在 Properties->Compatibility 中查看 MSI 文件是否有一些兼容性设置。这可能在某处按喇叭。

【讨论】:

  • 产品代码是有效的 guid(与 Orca 核对)。我检查了兼容性属性,它没有任何设置。我尝试设置它使用与以前版本的 Windows 的兼容性,但我得到了同样的错误。
【解决方案2】:

您是否使用不同的用户 登录并在 Windows 8 机器上处理或安装软件包?如果是这样,我要做的第一件事就是在新的 Windows 8 机器上尝试设置。如果有效,请立即卸载,并告诉我们结果。

您还应该检查现有的 Windows 8 机器并查看添加/删除程序以确定您的软件包是否在其中列出。可能有 许多副本什么都没有 - 您的软件包不包含 ALLUSERS=1,这意味着它可以默认为每个用户安装。尝试卸载那里的所有条目。

有关 SCCM 中出现的每用户问题,请参见此处: http://social.technet.microsoft.com/Forums/en-US/b0ff996e-9235-4682-8b28-71011e84fe7e/uninstall-program-using-msi-error-exit-code-is-1605-the-execution-status-is-failurenonretry?forum=configmgrswdist

【讨论】:

  • 机器上设置了另一个用户,但他们从未运行过此安装程序。除此之外,它是一台新的win8机器。请注意,它发生在 2 台不同的 win8 机器上,但在 win7 机器上运行良好。该软件包当前未安装在“添加/删除”程序中。我查看了您的链接,我认为这是不同的,因为日志文件显示 Product Code = ''。您链接中的所有示例都有实际的产品代码。
【解决方案3】:

在互联网上搜索“安装失败,缺少产品代码”时,还有其他几个条目,均返回代码 1605。

不幸的是,我无法从中找到明确的解决方案或理由。唯一的共同点是,它们都处理 .msm 文件。我们记得:.msm 文件(合并模块)没有自己的 ProductCode,也不能单独安装。 只能安装 .msi 文件。

我的猜测:要么在此过程中尝试直接安装合并模块,要么在合并合并模块时出现构建错误,从而导致问题。

【讨论】:

  • 我们在安装中没有使用任何 msm 文件
【解决方案4】:

我终于知道这是在通过闪存驱动器将安装程序从我的win7机器传输到win8机器的过程中引起的。我通过网络驱动器传输了相同的文件,当然它工作正常。显然,产品代码中的 guid,或者可能是整个安装程序,在闪存驱动器上已损坏,导致错误的原因。

感谢所有为我调查此事的人,感谢您抽出宝贵时间并为这个奇怪的错误道歉!

【讨论】:

  • 你还有那个损坏的 MSI 吗?我不太确定这一切背后是否存在 Wix 中的错误。是否可以发送 MSI 进行调试?我从未见过如果 MSI 损坏就会启动。闪存驱动器上的文件格式是什么?
【解决方案5】:

我会尝试我的答案类型相反:

首先,当您收到错误的第一部分(“此操作仅对..有效”)时,我可以给您一个简单的示例。 在命令行上尝试虚拟卸载不存在的 MSI:

msiexec /x {12345678-F0B2-36AF-8DF4-1DF6B63FC7B4}

(用是确认问题,然后看。)

所以:

需要更多信息,您的设置在做什么(您认为 :-)。

日志文件摘录不够。至少我不确定,这里的设置在做什么:卸载、更新、修复、修补?

在其中一种情况下,肯定会使用过期的 MSI 文件或产品代码调用 MSI。 通过简单的首次安装,您不会收到此消息。

【讨论】:

  • 当我双击安装程序时会发生这种情况,因此它应该进行安装。但是当我添加日志时,我使用这个命令行调用 msiexec /i "myinstaller.msi" /L*V installlog.txt。我用完整的日志编辑了问题
  • 请。请参阅我关于 .msm 文件的新答案。并且: 1. 尝试使用 msiexec 命令行(已经具有管理员权限)并告诉我们完整的行,包括。请使用您使用的文件名。 2. 请验证您的 MSI,例如与逆戟鲸——
  • 本例中的 1605 错误为 ERROR_UNKNOWN_PRODUCT “此操作仅对当前安装的产品有效。”不是磁盘空间。
  • 我不确定您在 1605 上的来源是什么,因为没有可用的磁盘空间。来自 MSDN:ERROR_UNKNOWN_PRODUCT 1605 此操作仅对当前安装的产品有效。我将 msi 复制到具有超过 10 gigs 可用空间的 c 驱动器并从那里运行但仍然失败。我注意到上面评论中使用的完整 msiexec 命令。
  • 只是为了澄清这一点:MSI 中有两种不同的“错误代码”。在快速搜索时,我只是找错了。如果您在错误表中查找示例,您会看到 1605,这就是我的意思。但是我在写完几分钟后删除了评论,这还不够快,无法抓住你的两个 cmets :-) 在我们的例子中,我们正在谈论 ERROR_UNKNOWN_PRODUCT,没错。
【解决方案6】:

其他可能性,不相互排斥:

  1. 您的 MSI 在某些不明显的方面很奇怪。例如,如果您安装没有组件表的 MSI 文件,您会收到奇怪的错误。如果 MSI 中没有文件或其他组件,它将无法正常工作,并且错误会很奇怪。如果它适用于 W7,这似乎不太可能。

  2. 系统以某种方式损坏。有关该产品的注册表项可能会按喇叭。 Windows 可能会在系统上查找其他版本的包代码或产品代码并发现错误数据。如果您已经安装了具有相同包或产品代码的设置,则更有可能发生这种情况。如果是这种情况,将产品和包 guid 更改为新值可能会解决此问题。如果您对同一个 MSI 进行重复测试并且失败严重,这也可能会导致问题。使用 VM 进行 MSI 测试,以免损坏硬件机器。

【讨论】:

  • 如果我将 Orca 中的产品代码更改为以前安装程序的 guid(有效),那么它可以工作,但我不知道为什么这很重要,我正在使用 WiX 并设置产品代码为“*”,因此它应该生成一个随机 guid。
  • PackageCode 怎么样?它们也会在系统上被跟踪,如果你不为每个构建更改它,Windows 会认为仍然安装了一些东西。
【解决方案7】:

刚刚发生在我身上。结果我们的构建脚本在每次构建时都会生成一个唯一的产品 UID(以强制进行重大升级),而最近对构建脚本的更改导致 UID 为空。

【讨论】:

    猜你喜欢
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2021-02-10
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多