1. 程式人生 > >應用程式正常初始化失敗!//找不到 msvcrtd.dll

應用程式正常初始化失敗!//找不到 msvcrtd.dll

2010年01月12日 11:21

      暈死,寫了半天,網路故障~又得重寫,做個筆記也不容易啊~  

    記錄一下幾天的折騰,順便做個小總結。   

      想要把vs2008編譯出的debug版的可執行檔案拿到沒有安裝vs2008的電腦上執行。為什麼不用releas版的,省的折騰?因為release版本的,編譯正常執行出錯,原因應該是動態連結的庫,應該都是release版的才行。好接下來就開始折騰了,我以為直接拷貝了可執行檔案所在資料夾得所有東西,帶上我動態連結的dll,裝上vs2008 redistribution就搞定了,哪有這麼複雜。

      第一個錯誤出現了:“缺少msvcp60d.dll和msvcrtd.dll”,拷過來以後依然錯誤:“由於配置環境。。。”覺得應該跟6.0沒有關係了,肯定是vs2008的問題。查了一些資料,在電腦上搜索9.0的幾個dll,msvcm90d.dll、msvcp90d.dll、msvcr90d.dll拷過去,報錯:“應用程式正常初始化失敗。。。”;因為之前寫程式的時候在自己機器上也有遇到過這個問題,當時是因為缺少dll所以提示這個錯誤。後來又繼續查資料找原因,又拷貝了D:/Program Files/Microsoft Visual Studio 9.0/VC/redist/Debug_NonRedist/x86/Microsoft.VC90.DebugCRT下的manifest檔案和同上面的三個dll同名的dll,依然報錯:“。。。build manifest。。。”,這次錯誤不一樣了,哇塞,興奮,終於可以知道具體一點的錯誤了,一看是manifest引起的,網上一搜,我的個乖乖,原來這些90的dll還有什麼小版本這一說~,那我怎麼去找這些同版本的manifest和同版本的dll呢。。。   

      看到有好多解決方案,下面的這是我試的第一個:既然你不提示,我就找工具來解析,看你依賴了什麼些東西。殊不知6.0就有這工具:dependency·,我還去網上搜羅~才想起來csdn上有人講過這玩意,當時不知道它是幹嘛的。他說的是dependencies~解析可執行檔案後,發現確實沒有多引用什麼dll啊又根據查來的一些資料,我拷貝了windows下的winsxs資料夾到那臺機器上並覆蓋它的這個資料夾。(當時已經重新編譯了一個debug版了,我把清單工具的嵌入清單改為了否),雙擊執行,ok成功了。但是後來再整理的時候。。。竟然沒辦法理清楚我到底是幹了什麼它就好了。。。   後來再回去研究那個清單檔案,也就是這個manifest,我在dependency裡面看到了它解析出來依賴的那些dll的版本號,以及它的路徑覺得好開心。找到拷過去就好。

      但是這樣不是根本解決問題的方法。。。就在這時候,有一個帖子的最下方,一個人的留言:2009年11月13日 星期五 09:14 A.M. 為什麼這麼折騰呢?這樣看來,微軟發明manifest是錯誤的,因為大家都為執行庫煩惱,真的還不如VC6,這可能嗎?其實很簡單,開啟你的vs,建立一個Setup and Development下的Setup Project專案,然後新增Merge Module,選擇你需要的執行庫,最後就是Build,生成的檔案與你的程式一起釋出就行了  後來,我就這麼幹地,順便把我自己用的dll,6.0的dll也順便打到包裡了。現在只要安裝了,在哪都能執行。感謝感謝~那個Xcyber,一語驚醒夢中人~早怎麼不看看那個右鍵屬性呢~哎~還是要反省啊。繞圈圈,生活有時候就是這樣,直接看吸收不了,反而要自己繞好大好大一圈才會說:哦~右鍵屬性嘛~O(∩_∩)O哈哈哈~