Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Same MSI project built on 2 different system, BAD!


10 replies to this topic

smc0862

smc0862
  • Full Members
  • 54 posts

Posted 19 October 2009 - 17:22

Hi,

I have a Basic MSI project that I built on one of my development system. I have since acquired a new development system and transferred all of my development tools to it, including InstallShield 12 and all the Merge Modules my project are dependent on.

After building the same project on the new system, I did an MSI Package Diff between the MSI package built on the old system and the one on the new system. I expected the results to show only minimal differences for date/time related entries, etc., but...

What I noticed on one of my features (which is a .NET component) two components/files were removed from the feature and several new components were included. I did not actually add these into the project, so I believe these are automatically inserted during the building of the MSI package based on the dependencies of the .NET component.

When built on the old system, MSXML4.DLL and CRAXDRT.DLL were added to the feature as components. When building on the new system, these are not added to the feature, but other components seems to be included.

Thanks in advance for any help in solving this one.

Tried uploading the MSI Package Diff logfile in a .RAR format, but it won't let me.

-Shawn



smc0862

smc0862
  • Full Members
  • 54 posts

Posted 19 October 2009 - 17:52

Looking at the feature in question a little closer, it looks like InstallShield replaced the MSXML4.DLL file with its Merge Module counterpart and likewise for the CRAXDRT.DLL.

Why it does this on the new development system and not the old I can't sort out. Is there some optional setting that instructs InstallShield not to do this?

-Shawn

vPanchumarthi

vPanchumarthi
  • Full Members
  • 56 posts

Posted 20 October 2009 - 08:11

Hi,

I presume that in your latest system, merge modules will be selected wrt to MSXML4.DLL . If you add components MSXML4.DLL under specified features in ISM file, I believe that when you move ISM file to another machine, these dlls should also be moved. or else build will not succeed. you will get error msg as MSXML4.DLL is missing.
Can you tell me whether you have added MSXML4.DLl as a file to your ISM? or else via Mergemodule in your ISM?

smc0862

smc0862
  • Full Members
  • 54 posts

Posted 20 October 2009 - 10:10

Hi,

The MSXML4.0 merge module is included ISM project and is attached to the parent feature of the one listed below.

To clarify a bit more the only difference here are the two systems. The .ISM and the entire folder structure containing the files to be built into the MSI package are identical on both systems.

The 2 files in question, MSXML4.DLL and CRAXDRT.DLL have not been added to the feature at design-time. For instance, let's say my feature looks like:

[Feature1]
-Component1 (file1.dll)
-Component2 (file2.dll)
-Component3 (file3.exe) .NET application

After building the MSI package on the old system and then opening up the MSI and looking at Feature1 I see:

[Feature1]
-Component1 (file1.dll)
-Component2 (file2.dll)
-Component3 (file3.exe)
-Component4 (msxml4.dll) Added at build-time
-Component5 (craxdrt.dll) Added at build-time
-Component6 (stdole.dll) Added at build-time

After building on the new system, the files added at build-time look to be the files contained within the MSXML4 merge module and the Crystal Reports merge module and not just the 2 files that were included when building on the older system.

Thanks,

-Shawn

smc0862

smc0862
  • Full Members
  • 54 posts

Posted 20 October 2009 - 10:33

Here are snippets from the build log files from both systems. The first one is from the older system and clearly shows that it's adding the 'file' that is a dependency.

-----------Old System------------------------
Adding file 'craxdrt.dll' that is a dependency of component 'Interop.CRAXDRT.dll'
Adding file 'msxml4.dll' that is a dependency of component 'Interop.MSXML2.dll'
Adding file 'stdole.dll' that is a dependency of component 'Interop.CRAXDRT.dll'
-----------------------------------

This one from the newer system showing it's adding the merge module that is a dependency and not just the file.

-----------New System------------------------
Adding merge module 'Crystal Reports 8.5 - Report Designer Component' that is a dependency of component 'Interop.CRAXDRT.dll'
Adding merge module 'MSXML 4.0' that is a dependency of component 'Interop.MSXML2.dll'
Adding file 'stdole.dll' that is a dependency of component 'Interop.CRAXDRT.dll'
-----------------------------------


How do I get it to include just the file like on the old system?

Thanks!


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 20 October 2009 - 11:32

It might be related to Tools > Options > General >Enforce Best Practices

smc0862

smc0862
  • Full Members
  • 54 posts

Posted 20 October 2009 - 11:55

Stefan,

It's unchecked on the new system. Not sure what it was on the old system, but most likely it was unchecked as well as this was the default.

Is there a pecking order that InstallShield goes through when locating dependencies? Anything to due with the search path for Merge Modules? I added C:\Windows\System32 to the list with no luck.

As I was getting this working on the new system, there was one other dependecy on an .OCX file that it could not locate. Once I registered the OCX, InstallShield was then able to locate the file based on it's registered CLSID. I thought this is what would happen for MSXML4.DLL and CRAXDRT.DLL as well, but it keeps grabbing the merge module instead.

Thanks,

-Shawn

smc0862

smc0862
  • Full Members
  • 54 posts

Posted 20 October 2009 - 17:17

Just for kicks I tried building the MSI package on our build system using the IS 12 Stand-Alone utility hoping it would generate a matching package as my older system.

But... I now have a 3rd variation of the MSI package built from the same exact project/files. mad.gif



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 20 October 2009 - 17:35

QUOTE (smc0862 @ 2009-10-20 11:55)
Anything to due with the search path for Merge Modules? I added C:\Windows\System32 to the list with no luck.

That's where the .msm files are located, so it doesn't make sense to add C:\Windows\System32 there.

There are other things that could be related:
- the .NET scanning settings - none, dependencies, properties
- a Microsoft security update for Visual Studio has replaced merge modules, causing problems, see http://msmvps.com/bl...er-updates.aspx


smc0862

smc0862
  • Full Members
  • 54 posts

Posted 21 October 2009 - 10:40

QUOTE (Stefan Krueger @ 2009-10-20 17:35)
That's where the .msm files are located, so it doesn't make sense to add C:\Windows\System32 there.

I know... I was grasping at straws with that one. Just trying to figure out what logic InstallShield is using to include these dependency files.

I tried the .NET scanning setting too, but that introduced different issues.

Are there any settings that I can use when building a patch to tell the patch to ignore the files it thinks was removed from the latest version? The validation mentions to add the files to the RemoveFile table, but the kicker is that I didn't even add these to the feature at design time. InstallShield takes it upon itself to add them.

My final goal here is to fix/rebuild an UPDATE.EXE that we recently deployed to a few customers. There is a small issue with one of the custom actions. So let's approach this from another angle...

Stefan, do you know if it's possible to unpack the UPDATE.EXE, open up the package, modify the custom action and repackage the UPDATE.EXE?

Thanks,

-Shawn

Edited by smc0862, 21 October 2009 - 10:41.


smc0862

smc0862
  • Full Members
  • 54 posts

Posted 21 October 2009 - 15:26

Well I tried building the patch using and setting the 'Ignore missing source files' on the previous setup Advanced tab and although it still threw the validation warnings during the build, the resulting UPDATE.EXE was able to patch the previous version correctly.

This still bothers me, but at least I can get this new update tested on some customer sites. smile.gif

Thanks for the suggestions everyone.

-Shawn