5

当我建立使用Visual Studio 2013预览Windows应用商店的应用程序,我注意到,我的应用程序二进制对msvcr120_app.dll的依赖。这个DLL是什么?我也注意到msvcr120_app.dll没有安装在“C:\ Windows \ System32”中,而msvcr120.dll安装在那里。Visual Studio 2013中的msvcr120.dll和msvcr120_app.dll有什么区别?

这不是很清楚,我

  • 是什么msvcr120_app.dll和msvcr120.dll之间的区别?

  • 怎么我的应用程序能够运行(当我在Visual Studio项目按F5)如果依赖msvcr120_app.dll没有安装在System32中?

回答

9

在Visual Studio 2013中,用于Desktop应用程序的C++ Runtime DLL与用于Windows Store应用程序的C++ Runtime DLL不同。

  • 桌面应用程序使用一个名为如msvcr120.dll,msvcp120.dll,vcamp120.dll,vcomp120.dll,vccorlib120.dll等运行时的DLL。使用C++利布斯位于“$(VCInstallDir)LIB“生成的二进制文件对这些DLL的依赖。

  • Store应用程序使用运行时DLL的名称,如msvcr120_app.dll,msvcp120_app.dll,vcamp120_app.dll, vcomp120_app.dll和vccorlib120_app.dll。使用二进制文件位于“$(VCInstallDir)的lib \店“的C++利布斯内置有这些DLL的依赖。

的主要区别是,这家店的DLL(那些在他们的名字_app)已经完全使用可Store应用程序在Windows API中实现。这可以通过在两种类型的DLL上运行“dumpbin/imports”并比较结​​果来验证。

此外,存储DLL不需要安装在System32中,因为Store应用程序的运行时依赖关系是使用单独的依赖关系包机制described here满足的。 VS2012和VS2013的VCLibs框架之间的一个区别是:在Visual Studio 2013中,VCLibs调试AppX软件包包含Debug和Release CRT DLL。

另请注意,包含任何依赖于Desktop C++ Runtime DLL的二进制文件的任何Store应用程序都不会被Windows Store接受。

+0

无店铺的DLL不需要安装在System32下任。正如名称已经解释的那样,该目录是(操作)系统的一部分。 – MSalters

+1

他们不需要“需要”,但他们可以安装在System32中。无论好坏,长期以来都是将一些运行时DLL(甚至是非系统DLL)安装到System32等中央目录中。 –

+3

其实这些dll不应该在那里。或者该应用不会通过微软的桌面应用认证。自Windows 2000以来,“不安装到system32”策略一直存在。 –

相关问题