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」策略一直存在。 –

相關問題