如何检查哪个应用程序正在使用msvcr80.dll?

时间:2012-11-01 01:54:12

标签: windows dll setup-deployment msvcrt

我使用发布配置使用 MSVC2005 编译 .exe 。问题是,当我将 .exe 分发给其他人时,他们会收到此消息:

This application could not be started, because the application configuration is incorrect. In order to solve the problem you should reinstall the application."

我给了他们 vcredist.exe ,它解决了这个问题。但是,我想知道为什么这只会出现在某些PC上?到目前为止,我有1台PC无法运行.exe而另一台可以运行 .exe 。两者都安装了相同的应用程序。可以运行我的.exe的PC安装了 msvcr80.dll ,而那些无法运行的PC没有 msvcr80.dll。

有谁知道为什么某些PC上没有安装 msvcr80.dll ?由于两台PC都安装了相同的操作系统和应用程序。

是否有一些工具可以检查哪个应用程序正在使用哪个DLL?

4 个答案:

答案 0 :(得分:1)

如果某些计算机已经安装了使用msvc 2005构建的程序,则可以使用exe的副本。我不认为在任何版本的操作系统上都预安装了msvc可再发行组件。

如果在运行时您想知道它是否使用特定版本的msvc运行时,您可以使用process explorer - 一个微软工具来尽可能多地显示有关进程的信息。

答案 1 :(得分:1)

  

有谁知道为什么某些PC上没有安装msvcr80.dll?由于两台PC都安装了相同的操作系统和应用程序。

Windows未预装任何版本的C运行时库。 C运行时库可以由运行vcredist的人员安装,也可以安装依赖于它的应用程序,并在其自己的安装程序中包含它的副本。

仅仅因为您正在查看的两台PC安装了相同的应用程序并不意味着它们具有相同的安装历史记录。也许有一台PC安装了一个包含运行时库的应用程序,然后卸载了应用程序,但是库已被遗忘。

如果您尝试分发依赖于C运行时库(或redist包中的其他库)的应用程序,您的选项是:

  1. 要求您的用户获取并安装vcredist。
  2. 包含必要库的副本,并将其安装在与可执行文件相同的目录中。
  3. 链接到运行时库的静态副本。
  4. 在.MSI安装程序中包含运行时库合并模块,如果尚未安装运行库,则会将其安装在公共位置。
  5.   

    是否有一些工具可以检查哪个应用程序正在使用哪个DLL?

    Visual Studio过去常常带有一个名为depends.exe的工具,它检查可执行文件或DLL并传递查找它所需的所有DLL。不再支持此工具,因为它没有在较新版本的Windows中提供的“并排”安装功能。但我相信有一个免费的(开源?)版本的depends.exe可用。

    如果您只想知道某个特定的可执行文件是否与DLL直接相关,您可以使用dumpbin,这是Visual Studio附带的命令行工具。如果使用dumpbin /imports myapp.exe,则可以看到它所依赖的所有DLL(但不一定是这些DLL所依赖的DLL)。

答案 2 :(得分:0)

回复"是否有一些工具可以检查哪个应用程序正在使用哪个dll?"阅读this。提供vcredist.exe可以解决问题,因为他们的系统中没有安装Microsoft Visual C ++ 2010 Redistributable Package(x86)/最新版本。可以从Microsoft's Official Website下载。此外,如果您对命令行感兴趣,可以查看命令tasklist

答案 3 :(得分:0)

静态链接C运行时是解决此问题的另一种方法。 以下是如何执行此操作:Static linking