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

Problem with VC90 CRT MergeModules

Hi All,

I've been trying to solve this issue for a few days, with no success. I would be glad if anyone here could give me some help.

I have a project in C++ compiled in Visual Studio 2008. My DLL files need Microsoft x86 VC90 CRT dlls msvcp90.dll and msvcr90.dll. In order to get those dll files installed, I've added "Visual c++ 9.0 CRT (X86) WinSXS MSM" and the relative policy merge module in my Installshield 2009 solution. This feature is installed before all my dlls.

The problem, however, is that for some reason those files are not being installed (both Vista and XP). When it tries to register my DLLs, I get an error due to missing msvcp90.dll and msvcr90.dll.

From my build log:

Merging modules...
Merging MSXML 4.0: Y:\Installshield 2009\Modules\i386\msxml4sxs32.msm
Merging MSXML 4.0: Y:\Installshield 2009\Modules\i386\msxml4sys32.msm
Merging Visual C++ 9.0 CRT (x86) WinSXS MSM: Y:\Installshield 2009\Modules\i386\Microsoft_VC90_CRT_x86.msm
Merging VC User CRT71 RTL X86 ---: Y:\Installshield 2009\Modules\i386\VC_User_CRT71_RTL_X86_---.msm
Merging VC User STL71 RTL X86 ---: Y:\Installshield 2009\Modules\i386\VC_User_STL71_RTL_X86_---.msm
Merging Visual C++ 9.0 CRT (x86) WinSXS MSM: Y:\Installshield 2009\Modules\i386\policy_9_0_Microsoft_VC90_CRT_x86.msm


And from the installer log on vista business:

WindowsFolder.21022.08.policy_9_0_Microsoft_VC90_CRT_x86.RTM.52105B6B_A3EF_3A90_882A_947B287C203A 9:43:51 AM 9:44:03 AM 12 seconds 1 - Success
WindowsFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54 9:43:51 AM 9:44:03 AM 12 seconds 1 - Success
SystemFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54 9:43:51 AM 9:44:03 AM 12 seconds 1 - Success
SystemFolder.246EB7AD_459A_4FA8_83D1_41A46D7634B7 9:43:51 AM 9:44:03 AM 12 seconds 1 - Success


When it tries to register my DLLs, they all fail. With the cancel/retry window open, I've tried to search for those DLLs files in my system and I can only find them in Installshield installation TEMP folder, not where they should be "c:\windows\winsxs" folder.

If I install vs redist manually, my installation succeeds.

Wondering, is there any workaround on this?

Since this was vista business, I created the setup.exe using installshield and set the required execution level as "administrator".

Thanks a lot,

log:

00001: (Unknown): === Logging started: 10/31/2008 9:43:51 ===
00002: (Unknown): Action 9:43:51: INSTALL.
00003: (Unknown): Action start 9:43:51: INSTALL.
00004: (Unknown): Action 9:43:51: SystemFolder.ABDE752DE7D64A7489EDCCC01A329964.
00005: (Unknown): Action start 9:43:51: SystemFolder.ABDE752DE7D64A7489EDCCC01A329964.
00006: (Unknown): Action ended 9:43:51: SystemFolder.ABDE752DE7D64A7489EDCCC01A329964. Return value 1.
00007: (Unknown): Action 9:43:51: CommonFilesFolder.ABDE752DE7D64A7489EDCCC01A329964.
00008: (Unknown): Action start 9:43:51: CommonFilesFolder.ABDE752DE7D64A7489EDCCC01A329964.
00009: (Unknown): Action ended 9:43:51: CommonFilesFolder.ABDE752DE7D64A7489EDCCC01A329964. Return value 1.
00010: (Unknown): Action 9:43:51: CommonFilesFolder.5371CEC4D66D4E0C8A4F896DDCC72956.
00011: (Unknown): Action start 9:43:51: CommonFilesFolder.5371CEC4D66D4E0C8A4F896DDCC72956.
00012: (Unknown): Action ended 9:43:51: CommonFilesFolder.5371CEC4D66D4E0C8A4F896DDCC72956. Return value 1.
00013: (Unknown): Action 9:43:51: CommonFilesFolder.4F69404019834DC1993FAABEE95F378D.
00014: (Unknown): Action start 9:43:51: CommonFilesFolder.4F69404019834DC1993FAABEE95F378D.
00015: (Unknown): Action ended 9:43:51: CommonFilesFolder.4F69404019834DC1993FAABEE95F378D. Return value 1.
00016: (Unknown): Action 9:43:51: WindowsFolder.21022.08.policy_9_0_Microsoft_VC90_CRT_x86.RTM.52105B6B_A3EF_3A90_882A_947B287C203A.
00017: (Unknown): Action start 9:43:51: WindowsFolder.21022.08.policy_9_0_Microsoft_VC90_CRT_x86.RTM.52105B6B_A3EF_3A90_882A_947B287C203A.
00018: (Unknown): Action ended 9:43:51: WindowsFolder.21022.08.policy_9_0_Microsoft_VC90_CRT_x86.RTM.52105B6B_A3EF_3A90_882A_947B287C203A. Return value 1.
00019: (Unknown): Action 9:43:51: WindowsFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54.
00020: (Unknown): Action start 9:43:51: WindowsFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54.
00021: (Unknown): Action ended 9:43:51: WindowsFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54. Return value 1.
00022: (Unknown): Action 9:43:51: SystemFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54.
00023: (Unknown): Action start 9:43:51: SystemFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54.
00024: (Unknown): Action ended 9:43:51: SystemFolder.21022.08.Microsoft_VC90_CRT_x86.RTM.0138F525_6C8A_333F_A105_14AE030B9A54. Return value 1.
00025: (Unknown): Action 9:43:51: SystemFolder.246EB7AD_459A_4FA8_83D1_41A46D7634B7.
00026: (Unknown): Action start 9:43:51: SystemFolder.246EB7AD_459A_4FA8_83D1_41A46D7634B7.
00027: (Unknown): Action ended 9:43:51: SystemFolder.246EB7AD_459A_4FA8_83D1_41A46D7634B7. Return value 1.
Labels (1)
0 Kudos
(7) Replies
MichaelU
Level 12 Flexeran
Level 12 Flexeran

You should use COM extraction, if possible. If not, you will have to install the CRT first, perhaps as a InstallShield prerequisite. One final option would be to link your .dll files statically against the CRT. The recent CRT (both v8 and v9) merge modules do not actually publish their SxS items in place until too late in the install for a self-registration of the same install to use them. See Aaron Stebner's blog for some details.
0 Kudos
fernandocaprio
Level 3

Hi,

Thanks for your help!

Unfortunately I can't static link to CRT due to some limitation of external DLLs, and since it's a huge code it's not a good idea to put some additional macros to the compilations procedures.

What I've done, which I don't like but seems to work, is to create a separate MSI for VS redistributables. I'm including this MSI as a nested MSI, which I know is not a good thing to do, but...

This seems to trick the full installation of dependencies prior to registering my components COM files.

Thanks,

Fernando
0 Kudos
Sairen
Level 7

Fernando, I'm having a slightly different problem with that MSM, and since you seem to have gotten further than I have, maybe you can help.

I select the CRT module in the Redistributables view and attempt to build, but I get an error "Could not compress..." all those files. I've never seen this before with any merge modules. It's apparently looking in
Interm\MergeModules\policy_9_0_Microsoft_VC90_CRT_x86.{GUID}\

When I look at that folder during a build, the folder is there, but it's empty...no files.

Do you know anything about this, or any tweaks you had to make to the MSM or its settings?

Thanks!
0 Kudos
MichaelU
Level 12 Flexeran
Level 12 Flexeran

Sairen, I think this has come up a couple times on the community, with the resolution being shortening the path to ISProjectFolder - e.g. moving it to C:\MyProj. That should be worth a shot, anyway.
0 Kudos
Sairen
Level 7

Michael,

That does seem to do it - thanks for posting a solution. Do you know if there are any plans to accomodate these really long MSM file names from Microsoft in future versions of InstallShield?
Also, when incorporating these MSMs, there are a lot of ICE03 warning about strings being too long in, for example, custom action names. Does that cause any problems?

Thanks!
0 Kudos
MichaelU
Level 12 Flexeran
Level 12 Flexeran

I'm not familiar with any specific plans to address the length limits, but I've not been involved with merge module merging. In general ICE03 warnings about string length can be ignored, as Windows Installer does not enforce string column length limits.
0 Kudos
fernandocaprio
Level 3

Sorry for not answering this before, but this is unfortunately true.

I had to build all my build system in Y:\ so this can work.
0 Kudos