cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Blake_W
Level 3

InstallShield creating huge Patch

I have created an Install using Basic MSI for our software package. Our software consists of hundreds of EXE, DLL, and other data files. When I want to create a patch using the Patch Design, I can create the patch but it includes every EXE in it, even though they were unchanged. I deliberately updated the version of one or two EXE expecting that the patch will only include the changes from the base install to the new patched install, but it still includes everything, causing the patch to be what I believe to be about 5MB to around 115MB.

I have posted my PatchCreation log. I know I have IncludedWholeFilesOnly set because I want to include the whole file of whatever was changed, not just the differing bits because I have found this to cause problems for our customers as well as in-house testing.

Thanks for any help!
Labels (1)
0 Kudos
(5) Replies
Blake_W
Level 3

I did not mention in the last post that I was code signing my MSI, setup and all my code files (EXEs and DLLs). I tried to do a build and patch without code signing all my files (still signing the MSI and Setup and Update) and I found that even with IncludeWholeFilesOnly, my patch shrinked in size from 115MB to under 4MB and still patched exactly what needed to be patched.

It seemed like the patching API is doing a bit level comparison for the patch, even though I wanted to include the whole file. All of my EXEs and DLLs are versioned so I thought that the patching API would only look at the version difference between my base setup project and my patch setup project to see if it needs to be included or not.

Can anyone please verify this? Is this a bug in the patching API (it seems to point in that direction since the ability to code sign files inside the package is new to InstallShield 2008)?
0 Kudos
DLee65
Level 13

I have seen similar behavior but the problem that I have seen is that all our packages are compressed. So to create a patch we have to create an uncompressed version of the files. Well, when we uncompress the files the file size varies by a byte or two. This causes all the files in the setup to appear as if they were changed and therefore flagged as part of the setup.

If we create an uncompressed version of the original setup, and an uncompressed version of the new setup, then use those two MSI packages to create the patch then the results are much different. Only the files that are truly changed are included in the setup and the package is very small - just like you are seeing.

I don't think this is a digital signing issue because in both tests we always signed our files.

I am fairly certain this is an issue with compression / decompression.
0 Kudos
Blake_W
Level 3

That is exactly the way I am doing it. For the base installation, I have 3 releases: a compressed CDROM (for CDROM distribution), a compressed Network Install (for online distribution), and an uncompressed Network install that is specifically used for building patches. All three releases have digitally signing on.

Then I copy the project, make my changes that should be included in the patch, build the uncompressed Network install and do a patch between the base uncompressed and the new uncompressed releases.

The patch is huge, and the log states that it includes all the EXEs and DLLs that haven't changed.
0 Kudos
DLee65
Level 13

How about if you take a copy of the original and just replace the files that have been updated in the copy of the original? Would that work? I believe that is the process we use right now since when we rebuild it restamps all the files with a different version number and date.
0 Kudos
Blake_W
Level 3

I'm not sure what you mean. The copy of the project I make still points to the same source EXEs and DLLs, only the newly updated ones are copied into this source folder, overwriting the old file.

Ex. My Source folder where InstallShield points to is C:\MyProduct\. I have a program in there called MyProgram1.exe (version 1.0.0.0) and MyProgram2.exe (version 1.0.0.0) and I build my project with this (code signing the two EXEs in the process). I then copy my project and call it my patch project, update MyProgram1.exe to 1.0.0.1 and overwrite it in c:\MyProduct\ and build the new patch project and then after create the patch. The patch includes both MyProgram1.exe (1.0.0.1) and MyProgram2.exe (1.0.0.0) if I code sign the files. If I don't do any code signing (in the original project and the patch project), the patch will only include MyProgram1.exe (1.0.0.1).
0 Kudos