View Full Version : QuickPatch question

11-02-2009, 11:21 AM
I have one basic project, lets say version 1.0.0. From inside Install Shield, I selected Tools -> Create QuickPatch. The wizard created a new project linked to the original, and I called it 1.0.1. Within this patch project, I again created a quickpatch, and created 1.0.2.

So on my test client, I install the original, then patch 1.0.1, then patch 1.0.2. Everything works as expected, and I see the patches listed in the Add/Remove Programs.

What is the Best Practice way of getting a new install going straight to 1.0.2, and not having to install the original, then patch, then patch ...?

11-02-2009, 11:45 AM
After more tests, I see that each patch is included with the latest patch version.. so I can Install the 1.0.0, and patch directly to 1.0.2. This is OK, but it would still be nice to go directly to 1.0.2 without forking a whole new project. Is that possible, and how?

11-04-2009, 12:40 PM
As long as your second patch is created from the first patch project, it should be possible to go from 1.0.0 -> 1.0.1, 1.0.1 -> 1.0.2, or 1.0.0 -> 1.0.2. Note that the requirement of creating the second patch from the first patch project is due to how patching is implemented by Windows Installer. Since a patch is basically the difference between two MSI packages, to do anything more than jump from one version directly to another requires each possible difference that could be encountered to be in the patch (though MSI 3.1 and newer provide functionality to eliminate this requirement, Express does not expose this functionality).

More information on patching can be found in the following articles:
What's in a Patch (http://blogs.msdn.com/heaths/archive/2005/09/01/what-s-in-a-patch.aspx)
How Patching Works (http://blogs.msdn.com/heaths/archive/2005/09/12/how-patching-works.aspx)
Patch Applicability (http://blogs.msdn.com/heaths/archive/2009/04/12/patch-applicability.aspx)

11-04-2009, 01:37 PM
josh - thanks for the response. That makes sense, but let me confirm with this new example. Imagine these events in chronological order,

I have a product, I released it at version 1.0, I put the setup.exe on my website.
Customer A downloads 1.0 and installs it.
Customer B downloads 1.0 and installs it.

I create a Quickpatch to generate Update.exe, which is version 1.1
Customer A downloads 1.1 and installs it.

I create a QuickPatch (based on the first Quickpatch), to generate Update.exe, which is version 1.2. I remove Update.exe (1.1) from the website, and put 1.2 up.
Customer A downloads 1.2 and installs it, so does Customer B.

Now Customer C comes along, how does he get the latest version?

Well I know the answer, they will run the 1.0 installer, then apply the 1.2 patch.

But is there any way to have Customer C directly install 1.2, with no patch?

11-06-2009, 12:56 PM
It is possible to have a full 1.2 version (this would be termed a 'minor upgrade' which can serve both as an upgrade and as first time install package). However, because authoring minor upgrades is a rather advanced scenario (due to the rules imposed by MSI), and because Express editions hide a number of MSI details needed to author minor upgrades (to make common authoring scenarios easier), it is not technically possible to author a minor upgrade with InstallShield Express.

You can author a major upgrade with Express, which can be used as a first time install or an upgrade install. Note though, that major upgrades will uninstall any existing product versions located on a target machine and then install the new version (minor upgrades install over the existing version without uninstalling). Major upgrades are created by changing the Product Code and Product Version in your project, then adding an upgrade item in the Upgrades view that points to the previous version to uninstall.

11-06-2009, 01:50 PM
Well put, thanks - that answers my question.