如何在Windows 7中查找已安装应用程序的UpgradeCode和ProductCode

cod*_*ver 37 installer automation windows-installer wix msiexec

我的机器上安装了一个应用程序.我也有它的源代码,但不知何故,此应用程序的ProductCode和UpgradeCode已更改.

现在我想获得这个已安装应用程序的UpgradeCode和ProductCode.我觉得必须有一些工具.

谁能告诉我如何获得已安装应用程序的UpgradeCode和ProductCode?

Yan*_*nko 66


重要提示:自从这个答案最初发布以来已经有一段时间了,聪明人提出了更明智的答案.检查如何找到已安装的MSI文件的升级代码?来自@SteinÅsmul,如果你需要一个坚实而全面的方法.


这是另一种方式(你不需要任何工具):

  • 打开系统注册表并搜索HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall密钥(如果它是64位计算机上的32位安装程序,则可能在其下HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall).
  • 该密钥下列出的GUID是此计算机上安装的产品
  • 找到你正在谈论的那个 - 只需逐个步骤,直到你在右侧窗格中看到它的名字

您停止使用的GUID是ProductCode.

现在,如果您确定重新安装此应用程序可以正常运行,则可以运行以下命令行:

msiexec/i {PRODUCT-CODE-GUID-HERE}重新安装=所有重新安装模式= omus/l*v log.txt

这将"修复"您的应用程序.现在查看日志文件并搜索"UpgradeCode".这个值被转储到那里.

注意:只有在确定正确实施重新安装流程并且这不会破坏已安装的应用程序时,才应执行此操作.

  • 虽然这是一个令人印象深刻的解决方案,缺乏良好的工具,这听起来像一个可怕的运动,充满了潜在的错误来源.使用Powershell,我们有更好的方法,没有任何第三方工具. (7认同)
  • 使用 PowerShell 获取 **升级代码** 和 **产品代码** 以及 **软件包名称** 的 **完整列表**: [**如何找到已安装 MSI 文件的升级代码?**](/sf/ask/3264596611/#46637095)。这将为您提供真实的 MSI 数据库值,无需任何手动注册表查找或黑客攻击。 (2认同)

mat*_*kie 18

返回结果需要一些时间,很快就需要几十秒,但是wmic运行良好且可以编写脚本:

wmic product where "Name like '%Word%'" get Name, Version, IdentifyingNumber
Run Code Online (Sandbox Code Playgroud)

结果:

IdentifyingNumber                       Name                                      Version
{90140000-001B-0409-0000-0000000FF1CE}  Microsoft Office Word MUI (English) 2010  14.0.6029.1000
Run Code Online (Sandbox Code Playgroud)

IdentifingNumber是ProductCode.我没有看到UpgradeCode的属性,但也许它可能被埋没在其他东西之下.有关其他许多示例,请参阅http://quux.wiki.zoho.com/WMIC-Snippets.html,包括卸载:

wmic path win32_product where "name = 'HP Software Update'" call Uninstall
Run Code Online (Sandbox Code Playgroud)


xBr*_*k3n 10

给每个人使用:

Get-WMIObject win32_product
Run Code Online (Sandbox Code Playgroud)

您应该知道,这将在PC上安装的每个MSI应用程序上进行自我修复.如果您要检查eventvwr,它会说已完成重新配置每个产品.

在这种情况下,我使用以下(Yan Sklyarenko方法的混合物):

$Reg = @( "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" )
$InstalledApps = Get-ItemProperty $Reg -EA 0
$WantedApp = $InstalledApps | Where { $_.DisplayName -like "*<part of product>*" }
Run Code Online (Sandbox Code Playgroud)

现在,如果你输入:

$WantedApp.PSChildName
Run Code Online (Sandbox Code Playgroud)

您将获得以下内容:

PS D:\SCCM> $WantedApp.PSChildName
{047904BA-C065-40D5-969A-C7D91CA93D62}
Run Code Online (Sandbox Code Playgroud)

如果您的组织在安装应用程序时使用了大量的MST,那么您可能希望避免运行自我修复包含它们还原一些关键设置.

  • 注意 - 这将找到您的产品代码,然后可以找到Yan提到的升级.不过,我通常只使用'InstEd It!' 或者"Orca"然后转到MSI的Property表,它将它们列在顶部.


小智 8

如果您有msi安装程序使用Orca(Microsoft的工具),表属性(行UpgradeCode,ProductCode,产品版本等)或表升级列升级代码打开它.

尝试通过注册表找到instller:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall查找所需的子项并观察值InstallSource.也许你将能够找到MSI文件.


cod*_*zen 6

Powershell可以很方便地处理这样的任务:

$productCode = (gwmi win32_product | `
                ? { $_.Name -Like "<PRODUCT NAME HERE>*" } | `
                % { $_.IdentifyingNumber } | `
                Select-Object -First 1)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用它来获取卸载信息:

$wow = ""
$is32BitInstaller = $True # or $False

if($is32BitInstaller -and [System.Environment]::Is64BitOperatingSystem) 
{
    $wow = "\Wow6432Node" 
}

$regPath = "HKEY_LOCAL_MACHINE\SOFTWARE$wow\Microsoft\Windows\CurrentVersion\Uninstall"

dir "HKLM:\SOFTWARE$wow\Microsoft\Windows\CurrentVersion\Uninstall" | `
? { $_.Name -Like "$regPath\$productCode"  }
Run Code Online (Sandbox Code Playgroud)