Windows installer 当Windows错误地认为已经安装了某些东西时,如何手动修复注册表?

Windows installer 当Windows错误地认为已经安装了某些东西时,如何手动修复注册表?,windows-installer,Windows Installer,我已经有这个问题出现了大约3次,Windows只是认为我的软件安装了,而它没有。我知道“已安装”状态由某个地方的注册表值控制,但我无法让Windows停止认为程序已安装,而不使用较新的版本号重新生成msi,并在虚拟旧版本上安装(虚拟版本不会显示在添加/删除程序中) 我无法在这些机器上安装第三方工具,因此查找注册表项是我目前唯一的想法。这是我唯一的选择吗?有人知道钥匙存放在哪里吗?查看: [HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\Curr

我已经有这个问题出现了大约3次,Windows只是认为我的软件安装了,而它没有。我知道“已安装”状态由某个地方的注册表值控制,但我无法让Windows停止认为程序已安装,而不使用较新的版本号重新生成msi,并在虚拟旧版本上安装(虚拟版本不会显示在添加/删除程序中)

我无法在这些机器上安装第三方工具,因此查找注册表项是我目前唯一的想法。这是我唯一的选择吗?有人知道钥匙存放在哪里吗?

查看:

[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer]

另见:

[HKEY\U CLASSES\U ROOT\Installer]
[HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Installer]

查找:

[HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer]

另见:

[HKEY\U CLASSES\U ROOT\Installer]

[HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Installer]

正如Kevin Richardson所说,获取那些没有任何作用的安装的详细日志。是的,这些产品可能已经安装好了,但是为什么要考虑入侵注册表呢?安装状态可能是“由注册表项控制”,但不仅产品有注册表项,还包括其升级代码和MSI文件中的每个组件。你可以通过搞乱一些东西来收拾残局的想法是不可能的,对不起。您应该知道这些MSI的ProductCode值,因此请客户执行msiexec/x{ProductCode guid}并查看发生了什么。这应该是第一步。如果您已经这样做了,但它不起作用,那么这是有用的数据,而且详细的日志可能会有所帮助

您不需要安装第三方工具-查看他们是否将运行此VBScript。它将枚举系统上所有已安装的产品,并检测您的产品是否存在-它将在文本文件中列出详细信息:

Option Explicit
Public installer, fullmsg, comp, prod, a, fso, pname, ploc, pid, psorce, pcache, pver

Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.CreateTextFile("prods.txt", True)

' Connect to Windows Installer object
Set installer = CreateObject("WindowsInstaller.Installer")
a.writeline ("Products")
on error resume next
For Each prod In installer.products
   pid = installer.productinfo (prod, "ProductID")
   pname = installer.productinfo (prod, "ProductName")
   pver = installer.productinfo (prod, "VersionString")
   psorce=installer.productinfo(prod, "InstallSource")
   ploc = installer.productinfo (prod, "InstallLocation")  
 pcache = installer.productinfo(prod, "LocalPackage") 
   a.writeline (prod & " " & pname & " Version " & pver & " installed at " & ploc & " from " & psorce & " cached at " & pcache)
Next

不管怎样,去拿那些日志

正如凯文·理查森(Kevin Richardson)所说,获取安装的详细日志,这些安装什么都不做。是的,这些产品可能已经安装好了,但是为什么要考虑入侵注册表呢?安装状态可能是“由注册表项控制”,但不仅产品有注册表项,还包括其升级代码和MSI文件中的每个组件。你可以通过搞乱一些东西来收拾残局的想法是不可能的,对不起。您应该知道这些MSI的ProductCode值,因此请客户执行msiexec/x{ProductCode guid}并查看发生了什么。这应该是第一步。如果您已经这样做了,但它不起作用,那么这是有用的数据,而且详细的日志可能会有所帮助

您不需要安装第三方工具-查看他们是否将运行此VBScript。它将枚举系统上所有已安装的产品,并检测您的产品是否存在-它将在文本文件中列出详细信息:

Option Explicit
Public installer, fullmsg, comp, prod, a, fso, pname, ploc, pid, psorce, pcache, pver

Set fso = CreateObject("Scripting.FileSystemObject")
Set a = fso.CreateTextFile("prods.txt", True)

' Connect to Windows Installer object
Set installer = CreateObject("WindowsInstaller.Installer")
a.writeline ("Products")
on error resume next
For Each prod In installer.products
   pid = installer.productinfo (prod, "ProductID")
   pname = installer.productinfo (prod, "ProductName")
   pver = installer.productinfo (prod, "VersionString")
   psorce=installer.productinfo(prod, "InstallSource")
   ploc = installer.productinfo (prod, "InstallLocation")  
 pcache = installer.productinfo(prod, "LocalPackage") 
   a.writeline (prod & " " & pname & " Version " & pver & " installed at " & ploc & " from " & psorce & " cached at " & pcache)
Next

不管怎样,去拿那些日志

这将有助于准确地确定您看到的错误以及您在得到错误时正在执行的操作。正在重新安装一些东西吗?升级?问题是没有错误!它只是没有做它应该做的。我使用WiX工具集来安装我的微服务,当我通过VNC尝试时,组安装程序(将大约10个msi链接在一起)只是通过安装链中的前几个msi。如果已经安装了相同版本的msi,但尚未安装任何内容,则这将是默认行为!假定这些是安装失败(通常是升级失败)的客户机器,这就是我被联系的原因,所以在我找到他们之前,我不知道他们对他们的机器做了什么。详细的安装程序日志应该详细说明跳过每个链接MSI的确切原因。你有吗?我不确定。组安装程序(通过Wix的Heat编译)确实留下了一个相当大的日志。让我四处看看,看看能不能找到什么。这将有助于准确地知道你看到了什么错误,以及当你得到它时你在做什么。正在重新安装一些东西吗?升级?问题是没有错误!它只是没有做它应该做的。我使用WiX工具集来安装我的微服务,当我通过VNC尝试时,组安装程序(将大约10个msi链接在一起)只是通过安装链中的前几个msi。如果已经安装了相同版本的msi,但尚未安装任何内容,则这将是默认行为!假定这些是安装失败(通常是升级失败)的客户机器,这就是我被联系的原因,所以在我找到他们之前,我不知道他们对他们的机器做了什么。详细的安装程序日志应该详细说明跳过每个链接MSI的确切原因。你有吗?我不确定。组安装程序(通过Wix的Heat编译)确实留下了一个相当大的日志。让我去看看能不能找到什么。