The two families use disjoint identifier spaces and target different host
endpoints, so an item carrying both commandId and guid is addressed
differently depending on this value:
mainmenu dispatches through menu.runMainMenuCommand, whose command
parameter is a string (GUID or path). Its commandId is a transient
Win32 menu id that dies with the menu that produced it.
contextmenu dispatches through menu.runContextCommandById, whose id
parameter is a number valid only within the originating session.
Which menu family a build pass is walking.
The two families use disjoint identifier spaces and target different host endpoints, so an item carrying both
commandIdandguidis addressed differently depending on this value:mainmenudispatches throughmenu.runMainMenuCommand, whosecommandparameter is a string (GUID or path). ItscommandIdis a transient Win32 menu id that dies with the menu that produced it.contextmenudispatches throughmenu.runContextCommandById, whoseidparameter is a number valid only within the originating session.