How can I find out what program installed or is using a specific DLL file?
I've got a DLL file in the SYSTEM32 directory of one server, which I'm not sure I actually need.
Google has told me what it is normally used for, but the software has never been installed on this system. Still, I do consider it possible that one of the other installed products on the server may have included (and therefore, presumaby, will require) the file.
I did a search through the Registry for the name of the file, and also for some strings I found in the file's metadata, and I could not turn up anything informative. (Although the ACMru key did catch my eye, until I found out what it's for.)
Is there anything else I can do, to get the system itself to tell me what program installed the DLL, and/or what installed program(s) (if any) would use it?
NOTE: Tool suggestions are nice, but I won't be installing or running any additional software on this system. I need to work with whatever's available on a default install of Server 2003.
I'd check the date it was placed on the system and compare that with other files in the system to get clues. Search should allow you to search the entire system by date.
Also, posting the name of the file here would allow some here who may be familiar with it to ID it for you.
You could potentially examine each .MSI file in the %SystemRoot%\Installer folder. All (?) programs that are installed through the Windows installer will add their MSI here so that they can be UNinstalled at a later time. The folder generally has a ton of stuff. If/Once you find the dll amongst those myriad of MSI packages, you will have to map the package back to a well-defined name.
To decompile the msi files using a script, you can try to use this VBS tool http://www.hanselman.com/blog/HowToListAllTheFilesInAnMSIInstallerUsingVBSciript.aspx or you can try a program called MSIDiff (which I've never used) http://dennisbareis.com/msidiff.htm. Of course, considering the constraints of not having to install tools, the latter won't necessary work in that regard. The former would if cscript is installed.
The latter tool might do the package name mapping for you without resorting to manually searching the registry for the appropriate GUID or MSI filename. The former tool can be modified to dump the package name if you knew which table/column to reference (I do not).
The VBS script simply examines the MSI file from a database perspective. The key work is done with: database.OpenView("SELECT FileName FROM File").
Process Monitor can do this for you. Just filter by the DLL's name and when a program tries to load it there will come an entry which mentions which process is looking for and/or accessing the DLL you mentioned.
You should also try to do a boot log (enable boot logging in the menu, then reboot and open process monitor again) which is necessary to catch programs and services that load it upon boot.