Does anyone know why msvcr80.dll is not installed in some PCs? Since both PC have the same OS and applications installed.
Windows doesn't come with any versions of the C runtime library pre-installed. The C runtime library could be installed by someone running vcredist or by installing an application that depends on it and includes a copy of it in its own installer.
Just because the two PCs you are looking at have the same applications installed doesn't mean that they have the same installation history. Perhaps one PC had installed an application that included the runtime library and then the application was uninstalled but the library was left behind.
If you're trying to distribute an application that depends on the C runtime library (or another library in the redist package), your options are:
- Require your users to get and install vcredist.
- Include a copy of the necessary library and install it in the same directory as your executable.
- Link to the static copy of the runtime library.
- Include the runtime library merge module in your .MSI installer, which will install the runtime library in a common location if it isn't already installed there.
Are there some tool that can check which application is using which dll?
Visual Studio used to come with a tool called depends.exe that examines an executable or DLL and transitively finds all the DLLs that it requires. This tool is no longer supported because it doesn't had the "Side by Side" installation feature available in newer versions of Windows. But I believe there's a free (open source?) version of depends.exe available.
If you just want to know if a particular executable has a direct dependency on a DLL, you can use dumpbin, a command line tool that's included with visual studio. If you use dumpbin /imports myapp.exe
, you can see all the DLLs that it depends upon (but not necessarily the DLLs that those DLLs depend on).