cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
josephine
Level 5

file limit for a Basic MSI merge module?

I need to build a merge module that includes around 64000 files, and got such an error:
ISDEV : fatal error -5023: Error building table File

Is there such a limit with a merge module?
I tested with a Basic MSI project (non-merge module), and it worked fine.


Thanks.
Labels (1)
0 Kudos
(11) Replies
josephine
Level 5

As I said, if I put all the files in a merge module, the build fails;
if I put all the files in a Basic MSI project with nothing else, it succeeds;
if I put all the files in a Basic MSI project with other files, the build succeeds, but the install fails with error 1334.

My question is, is there a file number limit?
0 Kudos
Lurean
Level 8

there is no limit to the number of files I have found, however when compressing the files into a single merge module, MSI or CAB file there is a total size limit of approximately 2GB. This is a limitation Microsoft has placed on the files. You might need to split it into a couple of merge modules and the installer that uses them will need to be either uncompressed or using CAB files that compress sections of the installers.
0 Kudos
Marwan
Level 7

Windows Installer has a limit of 32767 files as this is what the msi database schema defaults to. For Basic Msi, InstallShield uses a modified schema when you have a larger number of files included in your project, but this is not done when building a merge module project.
As a workaround, try modifying IsMsiMM.itp in the InstallShield\Support\0409 folder so the Sequence column definition is i4 instead of i2. Also, update the the _Validation table.

Here's an MSDN page with more info.
http://msdn.microsoft.com/en-us/library/aa367767.aspx
0 Kudos
josephine
Level 5

Thanks for the info.

I know what to do with the File, Media and Patch table. But how could I get access to the _Validation table? It does not seem to be available from Direct Editor? Thanks.
0 Kudos
befish
Level 4

Is there a step by step tutorial for doing this? In my basic MSI project I don't see how to change the column type in the file menu, and I'm not sure how to open the .itp files in a usable format.
0 Kudos
befish
Level 4

Any help? This thread has 1100+ views, so people are definitely facing this problem.

I can export the tables from the direct editor, but I can't re-import them, as there is a name collision, and I can't drop them to re-import my edited copies. What's the right way to do this?

Added bonus- will hand editing these files persist through updates?
0 Kudos
befish
Level 4

OK, so after much trial and error, here's what I did.

1- download ORCA from microsoft.
2- copy ISMsiPkg.itp
3- load up the .itp file in ORCA
4- go through the tables listed here: http://msdn.microsoft.com/en-us/library/aa367767.aspx and edit schema on the 3 tables to change the listed column from i2 to i4.
5- in the _validation table you need to find the table entry for each of the tables you just changed the schema and again change the MaxValue entry. Seems a little silly to have to mod it twice, but you have to.
6- replaced the ISMsiPkg.itp with my edited version.

Here's the next issue- any thoughts?
Once I did that I could build my project. When I added in all the files (dynamic linkage) it broke signing. When I went through the Release Wizard and unchecked the "Sign Windows Installer Package" box it will build the setup.exe. I verified twice that the only difference is whether I add in the new files.

So, on the upside, it works. The downside is that it now takes about two hours to create a setup.exe. Previously it took about 20 minutes. That seems like a pretty crazy increase in time.

Previously: ~29k files, 170ish meg setup.exe, ~20 mins to create setup, signed.
Now: ~38k files, 220ish meg setup.exe, ~120 mins to create setup, unsigned.
0 Kudos
Barvaz
Level 6

I did exactly like the previous post and the problem still exist.
My package contains more than 32767 files.
I replaced 32767 with 65536 in IsMsiMM.itp, ISMsiPkg.itp files the following:

In Table: _Validation
The Sequence column of the File table.
The LastSequence column of the Media table.
The Sequence column of the Patch table.

Any idea?
Please advice.
0 Kudos
Reureu
Level 10

Hi there,

Your thousands of files are probably not executable code, but loads of resources that don't need to be deployed as single files.

Why don't you try to pack your resources into some DLL's?
You can avoid quite a lot of troubles by doing so:

  • Less files to handle in your InstallShield project.
  • As you have so many files, you have probably used Dynamic File Linking in your project, and I think it is good to avoid them.
  • Your resource DLL's have a version number.

It would add a few steps to your application build process, but it might well be worth the effort. It would also drastically reduce the build time of your setup.

What do you reckon?
0 Kudos
Barvaz
Level 6

I need to create package of Online Help which includes many of html files.
How can i pack my resources (html) into some DLL's?
What about the option to increase the file limit for Basic Msi
0 Kudos
Reureu
Level 10

Do you really need to deploy all your HTML files and all the corresponding resources?
Could you pack all these documents in a CHM file (http://en.wikipedia.org/wiki/Microsoft_Compiled_HTML_Help)?

There are various tools to compile your HTML documents into a CHM file.

A reasonable practice consists of

  • packing your HTML documents into one or several CHM files, then distribute them in your installation package, so that users of your application can read your help file offline.
  • at the same time, uploading your HTML documents to a web server, so that other users can read it online.


As for the workaround to increase the file limit in a Basic MSI project, it could possibly work, but it might have some side effects.
I think it is a good practice to reduce the amount of files in your installation package. It makes the maintenance of your ISM project easier, and the installation quicker.
0 Kudos