Deploying VC++ 6 using ROOT on other machine

Hi,

I have a problem: I have a VC++ code which uses ROOT classes (especcially libHist) and runs very nicely on a machine on which the Visual Studio is installed. But when I make an Installation program with the Visual Studio Installer and install my small program to another machine (or ‘deploy’ it) on which there is NO Visual Studio, the program starts working and then it stops and it ‘wants to send an error message to the Microsoft’ :-). But if I copy it to another machine on which there is Visual Studio then there is no problem at all.

So what I don’t understand is that it doesn’t ask for any dll’s (everything is included in the installation program) and when I ask for a detailed info on the problem it says that it is something with the libHist.

What can be the problem? I would like it to be stand-alone.

Balint

You need the VC system DLLs to be installed on that machine too.
What you need is the bunch of VC++ run-time DLLs. Search for MSVC60.DLL
These DLLs must be located somewhere under your Studio directrory tree.

Hi,

All the dll’s are included. If they wouldn’t have been included the windows would have asked for them, right?
But it doesn’t ask for them. I even have a small GUI. It pops up. But after some seconds it disappears and I got an error message concerning the libHist - which is included too… 8)

You think that I should include into the installer EVERY MSVC60.DLL file that exists in there?

Balint

You may have some problem with those DLLS versions mismatch. I.e. you may have had TWO sets of the VC++ 6.0 DLL from the different versions.
This is why the proper DLL installation requires the special tool that can check the DLLs versions.

You may find what your application wants by running the
dependencywalker.com/
Normally this “walker” is part of the Studio. However, I did not remember right now whether it was included in VC++ 6.0

Can you try to install the “old” version (for example 3.03) from root.bnl.gov to see whether it helps. It should install the MS DLLs too ( at some point I switched to VC++ 7.0) . The last binary was done with VC++ 8.0.

By the way did I miss your “message”?

Hi,

Here is the list of dlls that I included in the Installer:

jpeg62.dll
Larry_Tiff_convert.exe
libCint.dll
libCore.dll
libHist.dll
libMathCore.dll
libMatrix.dll
libPhysics.dll
libRint.dll
libtiff3.dll
libTree.dll
libWin32gdk.dll
MFC42D.DLL
MSVCP60D.DLL
MSVCRTD.DLL
zlib1.dll

I downloaded the Dependency Walker but I don’t really understand the output. However I attached the error log of the windows when running the program on another machine.

I also downloaded the roor 3.03 from the bnl homepage but its installer didn’t worked on my xp. By the way now I am using Root 5.06/00 downloaded from the root.cern.ch page.

Balint
38ee_appcompat.txt (17 KB)

Oh, and maybe it is important to note that I take the VC++ 6 's MSVC*.dll files from the C:/WINDOWS/system32/ folder.

Balint

Hi,
build your program without debug info (i.e. in release mode), and use the non-debug ROOT version to link. You should not have dependencies on MFC42D.dll, MSVCP60D.dll, MSVCRTD.dll, but only on the ones without D. That way your application should work without MSVC, too.
Cheers, Axel.

Hi,

Axel: Thanx for the tip. I did as you suggested. Now, it stops working but now it says that the my main programs’ .exe file is wrong - when installing and running on another machine.

Valeri: I run Dependency Walker and it says that there is no EFSADU.dll and something wrong maybe with the MPR.dll

EFSADU.dll:
Warning: At least one delay-load dependency module was not found.

MPR.dll:
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

Thanx,
Balint

[quote]By the way now I am using Root 5.06/00 downloaded from the root.cern.ch page.
Balint[/quote]
That version was not compiled with VC++ 6.0 :bulb:
root.cern.ch/root/Version506.html
It is VC++ 7.1 version. You have to provide

[quote]The win32 and win32gdk versions have been compiled under VisualC++7.NET. These versions may not run correctly under Windows95 or Windows98 (we do not support these obsolete versions anymore). To use these files with the old VisualC++6, you may have to download the following DLLs and store them in a directory accessible in your PATH:

dformd.dll
MSVCP71.dll
MSVCR71.dll
MSFRT40.dll [/quote]