Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions schemas/JSON/manifests/latest/manifest.installer.latest.json
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@
"type": [ "string", "null" ],
"minLength": 1,
"maxLength": 512,
"description": "Silent is the value that should be passed to the installer when user chooses a silent or quiet install"
"description": "Silent is the value that should be passed to the installer when user chooses a silent install"
},
"SilentWithProgress": {
"type": [ "string", "null" ],
Expand Down Expand Up @@ -313,6 +313,7 @@
},
"maxItems": 16,
"uniqueItems": true,
"examples": ["DirectPlay", "Microsoft-Windows-Subsystem-Linux"],
"description": "List of Windows feature dependencies"
},
"WindowsLibraries": {
Expand Down Expand Up @@ -367,7 +368,17 @@
"type": [ "string", "null" ],
"minLength": 1,
"maxLength": 255,
"description": "ProductCode could be used for correlation of packages across sources"
"examples": ["{MSI-GUID}", "ContosoApp"],
"description": "The name of the ARP registry key, could be used for correlation of packages across sources"
},
"UpgradeCode": {
"type": [ "string", "null" ],
"pattern": "^{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}$",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could be mistaken, but I believe I've seen instances of a product code or an upgrade code value not being a GUID. In general, MSI product codes and upgrade codes do follow that convention, but I'm concerned this might break some things.

@sredna sredna Jun 27, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I searched the community repository and found none (for upgrade code, clearly not true for product code but that is not what we are talking about here). Upgrade codes are strictly a MSI concept and will always be a GUID.

Or to put it another way, how would a non-GUID work? Where in the registry would it be stored and which Win32/MSI API provides enumeration support?

"minLength": 38,
"maxLength": 38,
"examples": ["{MSI-GUID}"],
"description": "Represents a related set of products, could be used for correlation of packages across sources",
"$comment": "https://learn.microsoft.com/en-us/windows/win32/msi/using-an-upgradecode"
},
"Capabilities": {
"type": [ "array", "null" ],
Expand All @@ -378,6 +389,7 @@
},
"maxItems": 1000,
"uniqueItems": true,
"examples": ["contacts", "internetClient", "globalMediaControl"],
"description": "List of appx or msix installer capabilities"
},
"RestrictedCapabilities": {
Expand All @@ -389,6 +401,7 @@
},
"maxItems": 1000,
"uniqueItems": true,
"examples": ["deviceUnlock", "runFullTrust", "broadFileSystemAccess"],
"description": "List of appx or msix installer restricted capabilities"
},
"Market": {
Expand Down Expand Up @@ -501,7 +514,7 @@
"$ref": "#/definitions/ProductCode"
},
"UpgradeCode": {
"$ref": "#/definitions/ProductCode"
"$ref": "#/definitions/UpgradeCode"
},
"InstallerType": {
"$ref": "#/definitions/InstallerType"
Expand Down Expand Up @@ -533,8 +546,10 @@
"properties": {
"DefaultInstallLocation": {
"type": [ "string", "null" ],
"minLength": 1,
"minLength": 2,
"maxLength": 2048,
"pattern": "^[%\\]",
"examples": ["%ProgramFiles%\\ContosoApp"],
"description": "Represents the default installed package location. Used for deeper installation detection."
},
"Files": {
Expand Down
23 changes: 19 additions & 4 deletions schemas/JSON/manifests/latest/manifest.singleton.latest.json
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@
"type": [ "string", "null" ],
"minLength": 1,
"maxLength": 512,
"description": "Silent is the value that should be passed to the installer when user chooses a silent or quiet install"
"description": "Silent is the value that should be passed to the installer when user chooses a silent install"
},
"SilentWithProgress": {
"type": [ "string", "null" ],
Expand Down Expand Up @@ -415,6 +415,7 @@
},
"maxItems": 16,
"uniqueItems": true,
"examples": ["DirectPlay", "Microsoft-Windows-Subsystem-Linux"],
"description": "List of Windows feature dependencies"
},
"WindowsLibraries": {
Expand Down Expand Up @@ -468,7 +469,17 @@
"type": [ "string", "null" ],
"minLength": 1,
"maxLength": 255,
"description": "ProductCode could be used for correlation of packages across sources"
"examples": ["{MSI-GUID}", "ContosoApp"],
"description": "The name of the ARP registry key, could be used for correlation of packages across sources"
},
"UpgradeCode": {
"type": [ "string", "null" ],
"pattern": "^{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}$",
"minLength": 38,
"maxLength": 38,
"examples": ["{MSI-GUID}"],
"description": "Represents a related set of products, could be used for correlation of packages across sources",
"$comment": "https://learn.microsoft.com/en-us/windows/win32/msi/using-an-upgradecode"
},
"Capabilities": {
"type": [ "array", "null" ],
Expand All @@ -479,6 +490,7 @@
},
"maxItems": 1000,
"uniqueItems": true,
"examples": ["contacts", "internetClient", "globalMediaControl"],
"description": "List of appx or msix installer capabilities"
},
"RestrictedCapabilities": {
Expand All @@ -490,6 +502,7 @@
},
"maxItems": 1000,
"uniqueItems": true,
"examples": ["deviceUnlock", "runFullTrust", "broadFileSystemAccess"],
"description": "List of appx or msix installer restricted capabilities"
},
"Market": {
Expand Down Expand Up @@ -602,7 +615,7 @@
"$ref": "#/definitions/ProductCode"
},
"UpgradeCode": {
"$ref": "#/definitions/ProductCode"
"$ref": "#/definitions/UpgradeCode"
},
"InstallerType": {
"$ref": "#/definitions/InstallerType"
Expand Down Expand Up @@ -634,8 +647,10 @@
"properties": {
"DefaultInstallLocation": {
"type": [ "string", "null" ],
"minLength": 1,
"minLength": 2,
"maxLength": 2048,
"pattern": "^[%\\]",
"examples": ["%ProgramFiles%\\ContosoApp"],
"description": "Represents the default installed package location. Used for deeper installation detection."
},
"Files": {
Expand Down
Loading