1

So we use Product.wxs to setup a ProductCode by setting Product Id="*". I understand that this generate a new ProductCode every version/release.

What baffles me is that when we use a tool like Orca to view the ProductCode of the .MSI file it's one code, but when we check the registry specifically in this path:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\

Mind you this only happens with the 32 bit version, our 64 bit version using the same Product.wxs file have an exact match of the ProductCode both in the .MSI and in the Registry.

Is this a known problem? I cannot find it anywhere. Thank you.

nixor01
  • 23
  • 1
  • 7

2 Answers2

2

Product GUID: In these locations the real product GUID of the MSI should be used regardless of MSI-bitness:

  • 32-bit: HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • 64-bit: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

GUID formats: However, in other locations of the registry GUIDs do show up as compressed (just 23 characters) or packed (the rearranged GUIDs with the braces and dashes removed). For example in: HKCR\Installer.

There are also Darwin descriptors - which are combinations of the product code GUID, a feature name, and a component code GUID - they are used for MSI's advertisement features.

More information here: What is a compressed GUID and why is it used? (and here).


Sample GUID Conversion:

HKEY_CLASSES_ROOT\Installer\Products

Packed GUID: 0076C0A639AEC2738817CDFC311D064A
Normal GUID: {6A0C6700-EA93-372C-8871-DCCF13D160A4}
Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164
  • Thanks for your answer. It turns out that the problem is the ProductCode is different on different localization. I thought it was a problem because when I used the tool like Orca it would only show the product code of the EN localization. For example, a DE localization would have a totally different ProductCode. They are both however not the compressed version. To verify this, one may create a log during an msiexec installation. – nixor01 Jul 23 '20 at 15:11
  • 1
    Yes, it is correct that transforms can modify the product code for any MSI it is applied to. This would indeed register the product code from the transform and not the one from the MSI. – Stein Åsmul Jul 23 '20 at 18:29
1

It turns out that the problem is the ProductCode is different on different localization. I thought it was a problem because when I used the tool like Orca it would only show the product code of the EN localization. For example, a DE localization would have a totally different ProductCode. They are both however not the compressed version.

To verify this, one may create a log during an msiexec installation.

msiexec /i [YOUR_MSI].msi /lv [NAME_YOUR_LOG].log

And then check the ProductCode from inside the log, search for the line

MSI (c) (6C:58) [17:44:46:506]: Product Code from property table after transforms: {PRODUCTCODEHERE}

Take the code and verify whether it matches the counterpart in the registry.

nixor01
  • 23
  • 1
  • 7