X86 为什么32位.MSI文件的ProductCode与注册表中的对应文件不同?

X86 为什么32位.MSI文件的ProductCode与注册表中的对应文件不同?,x86,windows-installer,registry,guid,X86,Windows Installer,Registry,Guid,因此,我们使用Product.wxs通过设置Product Id=*,来设置ProductCode。我知道这会在每个版本/发行版生成一个新的ProductCode 让我困惑的是,当我们使用Orca之类的工具查看.MSI文件的ProductCode时,它只是一个代码,但当我们检查注册表时,特别是在以下路径中: HKEY\U LOCAL\U MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ 请注意,这只发

因此,我们使用Product.wxs通过设置Product Id=*,来设置ProductCode。我知道这会在每个版本/发行版生成一个新的ProductCode

让我困惑的是,当我们使用Orca之类的工具查看.MSI文件的ProductCode时,它只是一个代码,但当我们检查注册表时,特别是在以下路径中:

HKEY\U LOCAL\U MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

请注意,这只发生在32位版本中,我们使用相同Product.wxs文件的64位版本在.MSI和注册表中与ProductCode完全匹配

这是一个已知的问题吗?我哪儿都找不到。谢谢。

产品GUID:在这些位置,无论MSI位是多少,都应使用MSI的实际产品GUID:

32位:HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall 64位:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall GUID格式:但是,在注册表的其他位置,GUID只显示为压缩的23个字符,或者在重新排列的GUID中删除大括号和破折号。例如:HKCR\Installer

还有一些——它们是产品代码GUID、功能名称和组件代码GUID的组合——用于MSI的广告功能

更多信息请点击此处:

GUID转换示例:

HKEY_CLASSES_ROOT\Installer\Products

Packed GUID: 0076C0A639AEC2738817CDFC311D064A
Normal GUID: {6A0C6700-EA93-372C-8871-DCCF13D160A4}
产品GUID:在这些位置,无论MSI位是多少,都应使用MSI的实际产品GUID:

32位:HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall 64位:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall GUID格式:但是,在注册表的其他位置,GUID只显示为压缩的23个字符,或者在重新排列的GUID中删除大括号和破折号。例如:HKCR\Installer

还有一些——它们是产品代码GUID、功能名称和组件代码GUID的组合——用于MSI的广告功能

更多信息请点击此处:

GUID转换示例:

HKEY_CLASSES_ROOT\Installer\Products

Packed GUID: 0076C0A639AEC2738817CDFC311D064A
Normal GUID: {6A0C6700-EA93-372C-8871-DCCF13D160A4}

事实证明,问题在于产品代码在不同的本地化上是不同的。我认为这是个问题,因为当我使用Orca这样的工具时,它只会显示EN本地化的产品代码。例如,取消本地化将使用完全不同的产品代码。但它们都不是压缩版本

为了验证这一点,可以在msiexec安装期间创建日志

msiexec /i [YOUR_MSI].msi /lv [NAME_YOUR_LOG].log
然后从日志中检查ProductCode,搜索行

MSI c 6C:58[17:44:46:506]:之后属性表中的产品代码 转换:{PRODUCTCODEHERE}


获取代码并验证它是否与注册表中的对应项匹配。

结果表明,问题在于产品代码在不同的本地化上是不同的。我认为这是个问题,因为当我使用Orca这样的工具时,它只会显示EN本地化的产品代码。例如,取消本地化将使用完全不同的产品代码。但它们都不是压缩版本

为了验证这一点,可以在msiexec安装期间创建日志

msiexec /i [YOUR_MSI].msi /lv [NAME_YOUR_LOG].log
然后从日志中检查ProductCode,搜索行

MSI c 6C:58[17:44:46:506]:之后属性表中的产品代码 转换:{PRODUCTCODEHERE}


获取代码并验证它是否与注册表中的对应项匹配。

谢谢您的回答。事实证明,问题在于产品代码在不同的本地化上是不同的。我认为这是个问题,因为当我使用Orca这样的工具时,它只会显示EN本地化的产品代码。例如,取消本地化将使用完全不同的产品代码。但它们都不是压缩版本。要验证这一点,可以在msiexec安装期间创建日志。是的,transforms可以修改应用于任何MSI的产品代码。这确实会注册来自转换的产品代码,而不是来自MSI的产品代码。谢谢您的回答。事实证明,问题在于产品代码在不同的本地化上是不同的。我认为这是个问题,因为当我使用Orca这样的工具时,它只会显示EN本地化的产品代码。例如,取消本地化将使用完全不同的产品代码。但它们都不是压缩版本。要验证这一点,可以在msiexec安装期间创建日志。是的,transforms可以修改应用于任何MSI的产品代码。这将确实注册来自转换的产品代码,而不是来自MSI的产品代码。。。