Can I generate a patch(.msp) without the upgrade image(.msi)

387 views Asked by At

I've googled a lot, but there's little information about my question.

The question for short is "Suppose you have the target image(.msi), the list of changed binaries, but you don't have the upgrade image. How to make a patch based on those inputs?".


The detailed description is:
Currently, We use TFS as the source control. And each time when making a new MSI, we will increment the AssemblyFileVersion of all projects whether the project is really changed or not firstly. This is fine when there's no requirement to make a patch.
But, actually, we DO have the requirement to make a patch now. I have tried to create a patch using Purely WiX or Patch Creation Properties, but almost all projects will be considered as changed when we use these MSIs directly.

So if I have three inputs:

  1. Target Image(.msi)
  2. A list of really changed binaries
  3. Upgrade Image(all binaries' file version is incremented)    <--- this input may be useless

How Can I make use of above inputs to create a patch?

Thanks in advance.

2

There are 2 answers

0
Matthew O'Connell On BEST ANSWER

Alternative to Phils answer, you could add an ignore switch for the only incremented files in your Patch Creative Properties File.

<UpgradeFile File="YourFileID" Ignore="yes" />

see http://wixtoolset.org/documentation/manual/v3/xsd/wix/upgradefile.html

Depending on how many files there are to ignore might make Phils method easier. Although if you get the file table id list (export the table in orca and edit in excel, copy A3 down) and remove all the ids from you're really changed list, then add the xml around each id..it shouldn't take long.

0
PhilDW On

You can still use the upgraded MSI build when you make a patch. I don't know all the WiX things you may need to do, but I've done exactly what you want to do by setting IgnoreMissingSrcFiles in the TargetImages table:

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

and just delete all the files you don't want to be patched. You use admin images anyway to create the patch, so all you'll have are two admin images wiyth MSI files and only the files you want to patch.