• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 392
  • Last Modified:

how to find all dependency dll's to include them in application delivery

I am trying to make a installer for an application that does not require to include multiple and large additional files, like i.e. .NET service Pack 2.1 20 or 3.5 etc.
So what I am looking for is a dependency walker that allows me to copy all required dll's to one place so I can includen them in my installation.

Or do you have any other suggestions for the issue?
Basic thing is that the application that works on my machine does not work on all the others due to some missing windows update packages etc - thus I need to include them in my installation. But instead of including the original large packages I'd like to include only the dll's I need from them..
1 Solution
Hi Seppoo,

I don't think it's a good idea to just copy system DLLs onto a target machine because you can't grant these DLLs are working correctly with those installed on the system. You can't simply copy all system DLLs needed for any Windows-Version, i.e. Kernel32.dll or other very basic DLLs can't be exchanged between differen Windows-Versions.

IMO you should either see if it's possible to compile your application into a single EXE (i.e. by static linking of C-Runtime and MFC [if used]) or create a setup containing original Microsoft redistributable packages.

In the some latest versions of Visual Studio it's quite easy to create a very simple Setup, just add a new Project of Type 'Other Project Types->Setup and Deployment->Setup Project' to your solution and 'fill' it with your application dependencies. Or you can use some other Setup creation package, i.e. InstallShield from Microsoft or the OpenSource Tool NSIS (http://nsis.sourceforge.net/Main_Page).

Hope that helps,

>>>> because you can't grant these DLLs are working correctly with those installed on the system.
Some of these dlls you could copy into the folder where the application exe resides. That way they wouldn't collide with those installed at the target system. But as that wouldn't work with registered dlls and hence is not recommendable to do so.

Instead you should/could do:

1. For MS libraries and subsystems like .NET or Visual C++ runtime, get a download from MS download page suitable for the target system. Then install it separately (prior) to installing your executables. You also could install these packages within your own setup but that probably is much more difficult and may have the problem that newer updates of the packages must be installed separately anyhow. So, it is not much won. Also if you have different target platforms you would need to distribute packages for any of them.

2. For third party libraries you probably integrate their runtime setup into your own setup. If the have no own setup you may copy their dlls to the application folder as told above and - if needed - add them to .manifest (XP only) or registry. The .manifest is a .NET way to use individual versions of a dll without needing to install them globally for the target system. If you have no .manifest or can't use it, dlls were registered by calling regsvr32. But in that case your setup must check whether the dll is not already registered at the target system. In that case things get complicated cause some other application may need a different version than your's what could give unsolvable issues.  
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now