So, I have a windows service which can have multiple instances installed on a single server. The installer needs to be able to upgrade a single instance. The installer uses Instance Transforms, but I am unsure how to get major upgrades working as I would like.
For a major upgrade to work, my understanding is that I should have the Product Code change, so instances are defined in this form:
<Instance ProductCode="*"
UpgradeCode="{SOMEGUID}"
ProductName="Instance 1"
Id="Instance1"/>
The msi can be launched to install a new instance by:
msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1
However, after much searching the only way I have found to run an upgrade on a specific instance is this format:
msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus
The problem with this is if the product code is autogenerated for major upgrades, then I don't know what it is, so I can't pass in to the command arguments.
Is there a way to launch an upgrade using the Instance's UpgradeCode or InstanceID instead or ProductCode? Since both of those will stay static. Alternatively, can I launch the msi with no arguments, pick an existing instance (via checking registry) in the UI dialog, and set appropriate properties to force the msi into upgrade mode for that instance?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…