Windows Installer "This action is only valid for products that are currently installed" - "MSI_DBG:



我在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:WINDOWSsystem32msiexec.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_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer 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:UsersPATRI_~1AppDataLocalTemp50d229a.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上有一个有效的指南。

有没有人有任何见解,为什么我得到这个错误?

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

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

有几个建议:1. 有效的guid包括全部大写,所以如果Windows 8收紧了规则,请检查。2. appcompat覆盖意味着存在一些应用程序兼容性问题,例如假装系统是(例如)Windows 7或XP来安装它,因为否则它将无法安装在8上。或者是Windows内部伪造的。查看MSI文件是否在属性->兼容性中有一些兼容性设置。那可能在某个地方把事情搞砸了。

您是否以不同的用户登录并在Windows 8机器上工作或安装软件包?如果是这样,我要做的第一件事就是在一台新Windows 8机器上尝试安装。如果它工作,立即卸载,并让我们知道结果。

您还应该检查现有的Windows 8机器,并查看Add/Remove Programs,以确定您的软件包是否在那里列出。可能有许多副本或根本没有—您的包不包含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

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

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

我的猜测:要么在过程中有人试图直接安装合并模块,要么在合并合并模块时出现构建错误,导致这个问题。

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

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

我试着把我的答案逆一下:

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

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

(用yes回答问题,然后看)

:

更多的信息是必要的,(你认为:-)你的设置正在做什么。

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

在这些场景中,MSI肯定是用过时的MSI文件或产品代码调用的。对于简单的首次安装,您不会收到此消息。

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

  1. 你的MSI在某种程度上是奇怪的,不是很明显。例如,如果安装一个没有Component表的MSI文件,就会出现奇怪的错误。如果MSI中没有文件或其他组件,它将无法正常工作,错误将是奇怪的。如果它能在W7上运行,这似乎不太可能。

  2. 系统在某种程度上坏了。有关产品的注册表项可能会被按下喇叭。Windows可能会在系统中查找其他版本的包代码或产品代码,并发现错误的数据。如果您已经安装了具有相同包或产品代码的安装程序,则更有可能发生这种情况。如果是这种情况,将产品和包的指针都更改为新值可能会解决这个问题。如果您对相同的MSI进行重复测试,而它严重失败,这也可能导致问题。使用vm进行MSI测试,这样就不会损坏硬件机器。

就发生在我身上。结果是我们的构建脚本在每个构建上生成一个唯一的Product UID(以强制执行主要升级),并且最近对构建脚本的更改导致UID为空。

相关内容

最新更新