我使用发布配置使用 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?
答案 0 :(得分:1)
如果某些计算机已经安装了使用msvc 2005构建的程序,则可以使用exe的副本。我不认为在任何版本的操作系统上都预安装了msvc可再发行组件。
如果在运行时您想知道它是否使用特定版本的msvc运行时,您可以使用process explorer - 一个微软工具来尽可能多地显示有关进程的信息。
答案 1 :(得分:1)
有谁知道为什么某些PC上没有安装msvcr80.dll?由于两台PC都安装了相同的操作系统和应用程序。
Windows未预装任何版本的C运行时库。 C运行时库可以由运行vcredist的人员安装,也可以安装依赖于它的应用程序,并在其自己的安装程序中包含它的副本。
仅仅因为您正在查看的两台PC安装了相同的应用程序并不意味着它们具有相同的安装历史记录。也许有一台PC安装了一个包含运行时库的应用程序,然后卸载了应用程序,但是库已被遗忘。
如果您尝试分发依赖于C运行时库(或redist包中的其他库)的应用程序,您的选项是:
是否有一些工具可以检查哪个应用程序正在使用哪个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