Deploying VC++ 6 using ROOT on other machine


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.


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.


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?


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
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 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”?


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


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 page.

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.


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.


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

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

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


[quote]By the way now I am using Root 5.06/00 downloaded from the page.
That version was not compiled with VC++ 6.0 :bulb:
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:

MSFRT40.dll [/quote]