/build/static/layout/Breadcrumb_cap_w.png

Patching - how to cache files locally

Hi -

I want my patch to cache the files it is about to overwrite locally on the target machine so that they may easily be restored if/when I revoke the patch. What are the switches to do this? I'm using Adminstudio 7/ Installshield 11.

Lately, the patch appears to un-install properly, but the patched files do not revert and verbose log shows error 2318 (file not found) on them. I use whole-file patching against the the end-user machines. Windows Installer 3.1, REINSTALLMODE=omus (which is the default for IS patch builder). Would "vomus" work better?

Thanks for any comments.

William

0 Comments   [ + ] Show comments

Answers (3)

Posted by: sikkert 18 years ago
Orange Senior Belt
0
Well, this is a little strange.
When you apply a patch that is made in Windows Installer 3.0+, and the target machine has Win. Inst. 3.0+, then the files that the patch overwrites should be cached locally automatically. The local cache should be in c:\windows\installer\$PatchCache$\Managed\ Do you have any files here? This is by design, so you shouldn't need any other switches to do this. You could try with "vomus", as this would recache the files locally, but this is usually only needed when you patch an administrative installation, and want to upgrade the local installation.
Also, have you made the patches uninstallable? I haven't tested this myself, but it is quite possible that the files will not be cached if the patch is not uninstallable. Note that it is a very big difference between version 2.0 and 3.0 here.
I have no experience with Adminstudio/Installshield, but it works very well in Wise Package Studio.
Also, how do you uninstall the patches?
Posted by: williamp 18 years ago
Orange Belt
0
Hi - thanks for your comments.

Well, I "solved" the un-install problem (I had made a "Duh!" error and had passed the wrong GUID).

And I see the folder you pointed, thank-you. Because it has some "old" files in it, I had discounted it. Which is my mistake.

I spent some time looking at some monsterous verbose log files and I infer from them that Windows installer does not necessarily cache all patched files there and that is what confused me. In fact, WI won't re-cache files there if they exist in a subsequent intervening patch.

So for example, I have a base app called 1204. I patch it for the first time with 1205. WI caches the old files to the $PatchCache$ folder as you say. Later I apply a new patch, 1206, which updates all the files that were previously updated in 1205. WI doesn't re-write the files into $PatchCache$, because it seems it "knows" that they are already cached in 'C:\WINNT\Installer\1205.msp, and will extract them from there if I un-install 1206.

I have not figured out yet exactly what WI does when the subsequent patch updates some files which had previously been patched, and at the same time updates some files which had never before been patched. Presumably it will cache the latter to $PatchCache$.

Thanks again for your comments.

ORIGINAL: sikkert

Well, this is a little strange.
When you apply a patch that is made in Windows Installer 3.0+, and the target machine has Win. Inst. 3.0+, then the files that the patch overwrites should be cached locally automatically. The local cache should be in c:\windows\installer\$PatchCache$\Managed\ Do you have any files here? This is by design, so you shouldn't need any other switches to do this. You could try with "vomus", as this would recache the files locally, but this is usually only needed when you patch an administrative installation, and want to upgrade the local installation.
Also, have you made the patches uninstallable? I haven't tested this myself, but it is quite possible that the files will not be cached if the patch is not uninstallable. Note that it is a very big difference between version 2.0 and 3.0 here.
I have no experience with Adminstudio/Installshield, but it works very well in Wise Package Studio.
Also, how do you uninstall the patches?
Posted by: sikkert 18 years ago
Orange Senior Belt
0
Nice to know it worked out for you[:)]

Patching in Win. Inst 3 can be a little tricky, and I've spent a few hours trying to understand the details myself. What files get cached is also dependent on the type of patch (small, minor or major). Most often, the original installed files, and the latest minor upgrade will be cached. This is because all small upgrades should target either the original or latest minor upgrade. By caching last minor upgrade, you can then make small, binary updates to target this.
Also, like you say, all patches will be cached. This is because you can uninstall patches in Win. Inst 3 (you couldn't in 2.0 or older). If you uninstall a never one, those patches might have to be reapplied.

So for example, I have a base app called 1204. I patch it for the first time with 1205. WI caches the old files to the $PatchCache$ folder as you say. Later I apply a new patch, 1206, which updates all the files that were previously updated in 1205. WI doesn't re-write the files into $PatchCache$, because it seems it "knows" that they are already cached in 'C:\WINNT\Installer\1205.msp, and will extract them from there if I un-install 1206.

Exactly. Win Inst. 3 have a list of all patches that apply to an installation. When you install 1206, 1205 will still be in the list of patches that should be applied, even if it might not actualle be installed (because 1206 superseeds it). But if you then uninstall 1206, Win. Inst. 3 will see that now 1205 should be applied again, and gets it from cache.

I have not figured out yet exactly what WI does when the subsequent patch updates some files which had previously been patched, and at the same time updates some files which had never before been patched. Presumably it will cache the latter to $PatchCache$.

This depends. Take your example, where 1205 is first patch, and 1206 is second:

- 1206 is set to superseed 1205:
Any update made by 1205 will be ignored, but the 1205.msp file will still be cached in winnt\installer, in case you uninstall 1206.

- 1206 does not superseed 1205:
All files from the last minor/major upgrade (i.e. from the last patch that upgraded the Product Version), and that 1205/1206 patches, will be cached. The files that is first upgraded by 1205, and then by 1206 will not be cached, since 1205.msp is cached locally.

Example:
original: file1.dll v1.0
1205: file1.dll v1.1
1206: file1.dll v1.2

File1.dll v1.0 will be cached. The original will also be cached if either 1205 OR 1206 updates it.

If you want to know more, I suggest this whitepapaer from Microsoft, http://www.microsoft.com/downloads/details.aspx?FamilyId=AD7AC91E-2493-4549-AE6F-BF5E007C12A3&displaylang=en
It describes everything very well, I think.

Hope this helps.
Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
 
This website uses cookies. By continuing to use this site and/or clicking the "Accept" button you are providing consent Quest Software and its affiliates do NOT sell the Personal Data you provide to us either when you register on our websites or when you do business with us. For more information about our Privacy Policy and our data protection efforts, please visit GDPR-HQ