我如何才能找出安装了哪个程序或者正在使用哪个特定的 DLL 文件?

我如何才能找出安装了哪个程序或者正在使用哪个特定的 DLL 文件?

我在一台服务器的 SYSTEM32 目录中有一个 DLL 文件,但我不确定是否真的需要它。

Google 告诉了我它的正常用途,但这个软件从未安装在这个系统上。不过,我确实认为服务器上安装的其他产品之一可能包含(因此,可能将需要)该文件。

我搜索了注册表中的文件名称,以及我在文件元数据中找到的一些字符串,但没有找到任何有用的信息。(虽然 ACMru 键确实引起了我的注意,直到我发现它的用途

我还能做什么来获得系统本身告诉我哪个程序安装了该 DLL,和/或哪个已安装的程序(如果有)会使用它?

注意:工具建议很好,但我不会在此系统上安装或运行任何其他软件。我需要使用 Server 2003 默认安装上可用的任何软件。

答案1

我会检查它被放入系统的日期,并将其与系统中的其他文件进行比较以获取线索。搜索应该允许您按日期搜索整个系统。

此外,在这里发布文件的名称可以让一些熟悉该文件的人帮您识别它。

答案2

您可以检查 %SystemRoot%\Installer 文件夹中的每个 .MSI 文件。通过 Windows 安装程序安装的所有 (?) 程序都会在此处添加其 MSI,以便以后可以卸载它们。该文件夹通常包含大量内容。如果/一旦您在无数的 MSI 包中找到 dll,您将必须将包映射回明确定义的名称。

要使用脚本反编译 msi 文件,您可以尝试使用此 VBS 工具http://www.hanselman.com/blog/HowToListAllTheFilesInAnMSIInstallerUsingVBSciript.aspx或者你可以尝试一个叫做 MSIDiff 的程序(我从未使用过)http://dennisbareis.com/msidiff.htm当然,考虑到不必安装工具的限制,后者在这方面不一定能起作用。如果安装了 cscript,前者就可以。

后一种工具可能会为您完成包名称映射,而无需手动搜索注册表以查找适当的 GUID 或 MSI 文件名。如果您知道要引用哪个表/列(我不知道),则可以修改前一种工具以转储包名称。

VBS 脚本只是从数据库的角度检查 MSI 文件。关键工作是通过以下方式完成的:database.OpenView("SELECT FileName FROM File")。

答案3

进程监控可以为您做到这一点。只需按 DLL 的名称进行过滤,当程序尝试加载它时,就会出现一个条目,其中提到哪个进程正在寻找和/或访问您提到的 DLL。

您还应该尝试执行启动日志(在菜单中启用启动日志记录,然后重新启动并再次打开进程监视器),这对于捕获在启动时加载它的程序和服务是必要的。

相关内容