Visual c++ 为什么同一个C++。dll';我的电脑上有什么? 我注意到微软Visual C++运行库在我的计算机上都是重复的(例如:在以下位置:)
C:\Windows\System32Visual c++ 为什么同一个C++。dll';我的电脑上有什么? 我注意到微软Visual C++运行库在我的计算机上都是重复的(例如:在以下位置:),visual-c++,dll,redistributable,vcredist,Visual C++,Dll,Redistributable,Vcredist,C:\Windows\System32 C:\Windows\SysWOW64 C:\Program Files\Common Files\microsoft shared C:\ProgramFiles(x86)\Mozilla Firefox C:\Windows\WinSxS\amd64\u microsoft-Windows-u..lcrt-apifwd-winblue\u 31bf3856ad364e35\u 6.3.9600.18036\u none\u b157f27efd203c
C:\Windows\SysWOW64
C:\Program Files\Common Files\microsoft shared
C:\ProgramFiles(x86)\Mozilla Firefox
C:\Windows\WinSxS\amd64\u microsoft-Windows-u..lcrt-apifwd-winblue\u 31bf3856ad364e35\u 6.3.9600.18036\u none\u b157f27efd203c73
C:\Windows\WinSxS\x86_microsoft-Windows-u..lcrt-apifwd-winblue_31bf3856ad364e35_6.3.9600.18036_none_553956fb44c2cb3d
为什么会这样?我以为一个特定的.dll只能在windows上注册一次?不是这样吗?您真的可以从多个位置注册相同的.dll吗 <>我卸载了一个旧版本的Skype,它在自己的文件夹中有C++ .dll。但这样做会导致大量其他程序崩溃(如AdobeAcrobat等)。我通过修复C++ 2015从控制面板的程序和特性窗口重新分配来修复它。但在检查受损文件是否被重新创建和注册时,我发现了这么多版本。我如何知道哪一个是在Windows上注册的
如果我想编写引用这些.dll的代码,它会使用哪一个?我在文章中找到了这方面的原因 考虑这个场景:您安装程序“A”,它使用库 第1版。然后安装程序“B”,它还使用库 版本1,所以它不需要安装它-它可以只使用副本 这已经是节目“A”的礼节了。现在你可以卸载了 节目“A”。可能发生三件事:
- 它卸载库,因为它安装了库,并且应该清理 在它自己之后,没有意识到另一个程序依赖于库。程序“B”因此中断
- 它从不卸载库,因为其他程序可能正在使用它。结果,图书馆登记入住,但从未离开
- 我们设计了一些方法来跟踪有多少已安装的程序正在使用该库,并且只在最后一个程序被卸载时才将其删除。不幸的是,任何一个程序的失败——无论是编程错误还是未能正确安装或卸载——都会破坏这种技术。在最好的情况下,您只剩下不再需要的库的副本,在最坏的情况下,卸载一个程序可能会导致一个或多个其他不相关的问题 程序可能会失败
现在,在我的机器上,许多不同的应用程序都带有自己的微软Visual C++运行时副本。 因此,由于控制了整个系统,每个系统都更加稳定 他们自己的命运
然而,目前还不清楚如何使用相同的名称注册dll文件,但从不同的位置注册。我不认为这是可能的,但可能是。本主题已详细介绍。上面列表中唯一“注册”的副本是
C:\Windows\WinSxS
中的副本。其他的只是磁盘上的文件。还要注意的是,在这些目录中找到的并非所有文件都必须相同,即使它们可能具有相同的名称。System32
和SysWOW64
中的模块当然不同,因为前者包含64位模块,而后者包含32位模块。其他应用程序可能依赖于特定版本的运行时,并使用其私有副本(也称为本地部署)。