2

I have an installer that install some files etc. We use Parrafin to create .wxs files that we include in the installer.

When I include a certain .wxs file, the installer hangs on Calculating Space Requirements, if I remove this file from the installer, all works fine?

I have tried reading the logs but it just shows CostFinalize and stops there?

85284 Files and Components

10333 Directories

37 Features

85284 FeatureComponents

Directories Image

.wxs File Sizes Portal is at the top.

Edit: Tried to install on a VM and it wouldn't take there either. This only happens when I add (a large) component to the installer. I tried validating it with Orca, but it takes waaaay to long. The burn tool only gave me the font warnings.

Edit 2: When I disable multiple features and add the Portal feature the installer seems to work. Can this be that I have to many features? Or a feature that is too big?

Edit 3 After working on it, it now happens even with the Portal dissabled. I have no idea what the error is.

Edit 4 After searching some more I find this site that gives the max amount per component and files. And I am over that number. Microsoft has some info on it, so I will be trying that!

<DirectoryRef Id="INSTALLDIR">
      <Directory Id="dir_F7990BC992434CA08269373C780FC09E" Name="Portal">
        <Component Id="comp_AD6C481EA13D4A09886B6ABFE39FEB90" Guid="*">
          <File Id="file_8C1F31FBCB1C442191C18E1C28DFE1D4" KeyPath="yes" Source="..\..\..\Portal\create_user_table.txt" />
        </Component>
        <Component Id="comp_667C7BA41A8C47B99216E1FCE9694FAD" Guid="SOME_GUID">
          <File Id="file_5C0A67A5C1D045699C4605086A8985E0" KeyPath="yes" Source="..\..\..\Portal\package.json" />
        </Component>
        <Component Id="comp_6A5E08DD4BA041B79C2A803BF77AA911" Guid="SOME_GUID">
          <File Id="file_7D9CAEFDA0274FD5962E008ED96D0DE0" KeyPath="yes" Source="..\..\..\Portal\README.md" />
        </Component>
        <Component Id="comp_47673BC5120B4E36B16C2F1C2A5B312C" Guid="SOME_GUID">
          <File Id="file_F379EA1FAC914D04AE71C5F2935C01A6" KeyPath="yes" Source="..\..\..\Portal\server.js" />
        </Component>
        <Component Id="comp_186CD36E3F8D4E5C87883DEED6318719" Guid="SOME_GUID">
          <File Id="file_490119871C7F40DDBA45887213D854D8" KeyPath="yes" Source="..\..\..\Portal\server.log" />
        </Component>
        <Component Id="comp_3DF5DC2F788943BA9C8306FA59732A11" Guid="SOME_GUID">
          <File Id="file_96A709AF75D94034AD4B0E96B3BCE11A" KeyPath="yes" Source="..\..\..\Portal\service-install.js" />
        </Component>
        <Component Id="comp_DE5B71D9473F4FC489779922FE0D5952" Guid="SOME_GUID">
          <File Id="file_9586EC6A7C434412A9B7E9B5FE81346C" KeyPath="yes" Source="..\..\..\MWSS-Portal\service-stop.js" />
        </Component>
        <Component Id="comp_FFE35627FB7E45D298BB83207930EC8C" Guid="SOME_GUID">
          <File Id="file_B2776FD43A2D4F61B885018A011DACDC" KeyPath="yes" Source="..\..\..\Portal\service-uninstall.js" />
        </Component>
        <Directory Id="dir_F418E5D92B1A4D75981522C329550318" Name="app">
          <Directory Id="dir_7F390C9C4EBA4BDBBA54E4099DD462A2" Name="controllers">
            <Component Id="comp_EC62E12FA41E43FC96854CB9247CD409" Guid="SOME_GUID">
              <File Id="file_D6FF1EAEEB4E4612B2E140E94B07C9AA" KeyPath="yes" Source="..\..\..\MWSS-Portal\app\controllers\configurationController.js" />
            </Component>

<ComponentGroup Id="MWSS_Portal">
      <ComponentRef Id="comp_AD6C481EA13D4A09886B6ABFE39FEB90" />
      <ComponentRef Id="comp_667C7BA41A8C47B99216E1FCE9694FAD" />
      <ComponentRef Id="comp_6A5E08DD4BA041B79C2A803BF77AA911" />
      <ComponentRef Id="comp_47673BC5120B4E36B16C2F1C2A5B312C" />

Last part of the log:

Action ended 16:32:47: FileCost. Return value 1.
MSI (c) (3C:DC) [16:32:47:481]: Doing action: CostFinalize
Action 16:32:47: CostFinalize. Computing space requirements
Action start 16:32:47: CostFinalize.
MSI (c) (3C:DC) [16:32:47:488]: PROPERTY CHANGE: Adding OutOfDiskSpace property. Its value is '0'.
MSI (c) (3C:DC) [16:32:47:494]: PROPERTY CHANGE: Adding OutOfNoRbDiskSpace property. Its value is '0'.
MSI (c) (3C:DC) [16:32:47:500]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceAvailable property. Its value is '0'.
MSI (c) (3C:DC) [16:32:47:512]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRequired property. Its value is '0'.
MSI (c) (3C:DC) [16:32:47:513]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRemaining property. Its value is '0'.
MSI (c) (3C:DC) [16:32:47:546]: Note: 1: 2205 2:  3: Patch 
  • Have you run validation on the resulting MSI file? You can do so from within Orca (search for "Orca" in [this answer](https://stackoverflow.com/a/29937569/129130) to find a description how to install Orca). Also: if you make the MSI available, I would be happy to take a quick look. Off the top of my head, you could also try an [admin install](https://stackoverflow.com/questions/1547809/extract-msi-from-exe/24987512#24987512) of the MSI and try to install from the admin image - see if that changes things (the files are now not compressed). – Stein Åsmul Jan 16 '18 at 16:28
  • In the heat of the moment, I guess I forgot the most obvious test: please make sure you have checked the installer on another computer to verify that the problem really exists. You have probably tried this already? – Stein Åsmul Jan 16 '18 at 19:05
  • I can't share the MSI because of information, and the program requires certain pre-installed programs. So testing it on other computers is hard, I might setup a VM for that. I got some warnings, some about fonts, and about the components being to big for win9X systems. But that shouldn't give me this problem.And some dialogs with bits set in the Attributes colomn? –  Jan 17 '18 at 09:12
  • Tried in VM and same problem, hangs on Calculating Space Requirements –  Jan 17 '18 at 11:15
  • That log file looks completely normal - I compared to one of my test logs. It seems what is next after the log cuts off is resolving the directory table (CostFinalize). This standard action will also check if all target directories are writeable. I suppose there could be problems resolving the directories and / or there is something not writeable. – Stein Åsmul Jan 17 '18 at 17:54

2 Answers2

1

It took me a while but I think I have it figured out.

The max amount of components is 65536, I have 95904. Even after setting the tables data types to longs it still fails. So either I have to have multiple files per component, or split it in different installers.

After updating the Paraffin source code to have every directory (instead of a file) per component. It installs. I now have 10623 components.

David Gardiner
  • 16,892
  • 20
  • 80
  • 117
  • Sorry, this I should definitely have pointed out for you sooner - it is one of the first things to check. Personally I would split into several installers and use a Burn bundle to install the whole suit. [**Maybe briefly check this answer**](https://stackoverflow.com/questions/1542656/wix-to-install-multiple-applications/1546916#1546916). And for the size limitation: [Authoring a Large Package](https://msdn.microsoft.com/en-us/library/aa367767%28VS.85%29.aspx) and [Limitations of a Large MSI Package](https://www.symantec.com/connect/blogs/limitations-large-msi-package). – Stein Åsmul Jan 23 '18 at 16:20
  • And just throwing in the last link to installsite.org: [**What are the limits for a large MSI package?**](http://www.installsite.org/pages/en/msifaq/a/1043.htm) for reference. – Stein Åsmul Jan 23 '18 at 16:27
  • It's ok! I know a lot more about Wix then I knew before, so it is all for a good cause. Thanks for the additional reads! –  Jan 23 '18 at 16:27
  • Do you need patching for your package? If so I would test it right away. Multiple files per component does not always bode well for patching (or minor upgrades) in my experience. The bigger the package, the greater the desire for a small "hotfix" may become. – Stein Åsmul Jan 23 '18 at 16:30
  • I am not sure, but I always assume someday, something, needs to be changed. I think I am going to build multiple .msi and bundle them. It would make developing easier too. –  Jan 23 '18 at 16:37
  • Typically you will be asked "why can't we update these half dozen files and not uninstall and reinstall the whole application with thousands of files?". Windows Installer updates are hard to deal with (very hard in fact) and your package should follow all standards to make upgrades possible without errors. A single file per component helps a lot. If you read the link above on "splitting MSI files" you can get some ideas to discuss with your team I guess. Major and minor upgrades are topics you should understand fully going forward. Maybe upvote helpful comments and answers (so they are found) – Stein Åsmul Jan 23 '18 at 16:47
0

UPDATE: I forgot Occam's razor for this one - I will still leave the debugging suggestions below - maybe someone can find something relevant there at some point.

In summary, though: the package in question was just too big hitting the size limitations for MSI files as described in the three links below. It should be our first suspicion for problems like these (when the same "lockup problem" is seen on multiple machines):

Rather than dealing with such big packages, please consider splitting your setup into several MSI files and install them via a bootstrapper or sequencer such as Burn. See these links:


I'll just add this as an answer rather than spam with comments. I will update and evolve this once we get more information.

I assume you are not on Win9x? Did you try validate? If so, did you get any errors / warnings? With regards to logging, maybe try "flush to log":

msiexec.exe /package "C:\Setup.msi" /L*V! "C:\msilog.log".

The key is the ! character, it forces the log to be written continuously instead of in batches. Just a long-shot to see if you can get some sort of error message recorded.

The test on the VM basically strongly indicates that you have a genuine error in your MSI file - in some form. Really do try that validation - it might not tell you anything, but if it indicates anything at all, then you get something to start with.

Also: your MSI should generally not contain any sensitive information such as: login credentials, passwords, database connection strings, user names, share name, IP-addresse, machine names, or other sensitive data. All of this should be set either in a transform or by means of PUBLIC PROPERTIES when the MSI is being installed - or entered into the setup GUI as the setup is being executed on the target systems. There is some information here on using transforms and PUBLIC PROPERTIES: How to make better use of MSI files.


UPDATE: How large is this MSI? In megabytes, number of components, number of files, etc... Can you try to run an admin install on it and install and / or validate the extracted MSI? Another long-shot.

UPDATE: I suppose there could be something wrong with your build computer. Maybe run through this check list of possible problems. I would first try 1) running the MSI directly from the local disk (no network drive), 2) disable anti virus or security software, 3) are you running as admin? Do you get a UAC prompt? Less common these days, but you could also have a 32bit/64bit issue.

UPDATE: I don't want to take you off course, but I want to draw your attention to the fact that a lot of your source content is actually necessary - all the long Id attributes etc... I know you are auto-generating, and I have never used Paraffin, but you could try to remove all these unnecessary attributes and see if the resulting MSI behaves better: Syntax for guids in WIX?. Try this if all else fails - I am just adding it for completeness. I don't really think this is the real culprit, but it is not impossible either.

UPDATE: To interpret an MSI log file, check this article from Robert Macdonald from the Windows Installer Team is highly recommended as a practical look at MSI logging: How to Interpret Windows Installer Logs. And a quick link for safekeeping and future reference.

UPDATE: As you explain, it seems you get stuck during "costing" (space check). There is a property that can be set to simplify costing, it is called MSIFASTINSTALL. Its use to speed up installation is described here: How can I speed up MSI package install and uninstall?. Perhaps try to set it to 3 as explained in the linked answer (see command line to use in answer).

UPDATE: I really think this must be a decompiled Installshield MSI that has been updated with Paraffin - or something like that - as such there could be some weird incompatibilities that surface between Installshield's way to do things and WiX. Very hard to debug :-(. You will hate it, but I would suggest you try to quickly create a similar test MSI by using WiX's own heat.exe to generate a new WiX source file with all the files. Then you compile a new MSI from the new source and run only on a test system to see if it is working as expected (fast). Also, do you have access to Installshield? If so, open your existing MSI, go to the components view and select the first component. In the property list to the right, click the ... or similar in the "Destination" field to open up the list of destination folders. Does the directory list resolve? (does it look as expected).

Stein Åsmul
  • 39,960
  • 25
  • 91
  • 164
  • No, both me and the VM are on Windows 10. I did validate the msi with burn (wix tool) it just gave me the usual warnings about the fonts not having a language column. I will start a Orca validation and just let it run, maybe it will give me something. We have to setup a config file, so the user has to enter some sort of IP, Username, Password etc. I will read the "Make better use of MSI", thanks! If I add all the files the MSI is ~138 MB. I still have to try the admin install way. I might just start a new project with only the "buggy" component. Just to make sure its not some file. –  Jan 17 '18 at 14:11
  • OK, try that single component approach. 138MB is normal size. What is in that big component anyway? Registry stuff? Files? The ``Make better use of MSI`` is a little long and winding, but may be helpful overall. It looks like validation is just as slow on an admin image MSI (smoke test), but you could discover problems by looking at the extracted file content. Maybe give it a quick once-over. Can you show the WiX source for that big component? – Stein Åsmul Jan 17 '18 at 14:22
  • So I tried to do the admin install, if I try it on the .msi with all the files, nothing happens after "Preparing Install". If I do it without the "buggy" component, i get: "This installation package could not be openend. Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package." –  Jan 17 '18 at 14:32
  • Just tried the Portal component on its own, and that installs correctly. So I am guessing it is in my project rather than a file/folder. Orca is still at ICE 03 (I started it a hour ago) –  Jan 17 '18 at 15:27
  • So I tried to run the MSIFASTINSTALL but it doesn't do anything, just like the admin install the installer never starts. –  Jan 18 '18 at 11:45
  • How many files are in this setup? How many components? Using Orca, open the File and Component tables - see number of rows in statusbar. Can you add a screenshot of your Directory table? How many Directory rows? There must either be something very exotic wrong, or it is a big package somehow. I noticed your source uses INSTALLDIR as directory name - you didn't happen to decompile an Installshield MSI to get the original WiX source file, did you? Maybe Paraffin uses this folder name by default? I haven't tried it. Just trying to get a picture of what is unusual about this source file. – Stein Åsmul Jan 18 '18 at 12:02
  • So, I just randomly started to comment out things and include the Portal repo. And it works now. So I am guessing that somewhere something is getting to large? I have 1 Feature, with 14 nested features, might that be the problem? I am gonna do some more testing! Honestly I am not sure, someone else started this project, I just took over. I will ask for confirmation. –  Jan 18 '18 at 12:38
  • I have had MSI files with that many features without such problems. I am wondering if you are including a lot of folders with the same name or a lot of files with the same name in different folders which I suppose could confuse the costing process. Never seen that before though. I added one more update to my answer. Finally: is this product "in the wild"? – Stein Åsmul Jan 18 '18 at 13:11
  • I don't have access to InstallShield. I will start a new project with heat generated files, to see if it does something. –  Jan 18 '18 at 13:23
  • It looks like I have to many files and need to set a value somewhere. Hoping that works. –  Jan 23 '18 at 11:50
  • Not sure I understand what you mean by setting a value somewhere? Are you referring to something like this: [Authoring a Large Package](https://msdn.microsoft.com/en-us/library/aa367767%28VS.85%29.aspx)? Some more details here, not 100% sure it is all up to date: [Limitations of a Large MSI Package](https://www.symantec.com/connect/blogs/limitations-large-msi-package). There is also some info on [installsite.org](http://www.installsite.org/pages/en/msifaq/a/1043.htm). Pretty much all the same information it seems. Just added for reference. – Stein Åsmul Jan 23 '18 at 16:13
  • Well, I had to many components. So that didn't work either. I updated the Parrafin Source Code, so now we have every directory in a component instead of a file. That did the trick. It is installing now. –  Jan 23 '18 at 16:19
  • Glad it works now - perhaps read the link I posted to your summary answer - about decomposing your setup. Just something to consider. – Stein Åsmul Jan 23 '18 at 16:26