opscode/omnibus-chef — pull request #176 by btm (2014-06-13 19:16:17+00:00)
Title: Configure a Product Code for Chef Windows MSI

We currently generate a new Product Code for the Chef Windows MSI in every build, which makes it difficult to detect if the MSI is installed on a system by the Product Code because it is different for every version. This PR adds functionality to set a static Product Code. While the Upgrade Code should always stay the same, the Product Code generally should be changed between major releases.

http://msdn.microsoft.com/en-us/library/aa367850(v=vs.85).aspx

```
The product code must be changed if any of the following are true for the update:

* Coexisting installations of both original and updated products on the same system must be possible.
* The name of the .msi file has been changed.
* The component code of an existing component has changed.
* A component is removed from an existing feature.
* An existing feature has been made into a child of an existing feature.
* An existing child feature has been removed from its parent feature.
```
@adamedx I'm not sure about the consequences of the "The name of the .msi file has been changed." requirement, as we do have a different msi file name for every build.

```
btm_000@BTM-DESKTOP ~/Documents/github/omnibus-chef (master)$ git grep product_code config
config/projects/chef-windows.rb: msi_parameters[:product_code] = "F00E9344-7D6D-4D9F-B0D3-672934D3CD31"

PS C:\ruby> ruby .\msiprop.rb C:\ruby\msi\chef-windows-11.14.0.alpha.4-86-gac0a893-1.windows.msi ProductCode
ProductCode: {F00E9344-7D6D-4D9F-B0D3-672934D3CD31}
```