最近編寫一個了一個工具要在WinPE下執行,總是出錯提示信息是“The program can't start because MSVCP100.dll is missing from your computer. Try reinstalling the program to fix this problem"。匆匆百度了一下,果然一堆灌水帖。果斷轉入Stackoverflow和Codeproject,查詢無果。去MSDN,有所發現,有人問過類似問題,一路按圖索驥,直到找到以下一篇帖子,才終於明白怎么回事。
原來當你使用VS創建一個可執行工程,VS一般會自動配置工程為Debug,而你的Runtime Library會配置成/MTD或者/MDD,如果你的工程引用到了C++標准庫,MSVCPRT.lib會被自動鏈接,而這個動態鏈接庫會導入MSVCP100.dll。也就是說如果你在代碼中使用了C++標准庫,你的代碼就需要MSVCP100.dll才能夠執行,而WinPE的環境下MSVCP100.dll根本不存在,我推測MSVCP100.dll是VS自帶的用於工程調試的。所以要解決這個問題,必須把工程配置為Release。如果工程配置為了Release,Runtime Library必須要改成/MT否則會出現以下鏈接錯誤信息“error LNK 2001:unresolved external symbol _CrtDbgReportW"(不幸的是我也是遇到后才想明白的。)
所以以后遇到諸如缺少MSVCP100.dll或者MSVCP100D.DLL,MSVCR100.DLL,MSVCR100D.DLL等問題,可以考慮是否是你的工程配置為了Debug,貌似這些dll都是VS自帶的用作調試的。Release狀態下這些dll中的信息會被寫入到最后的exe中。詳細信息請參考以下鏈接。
Reference: