VC200應(yīng)用程序正常初始化失敗-0xc0150002_第1頁(yè)
VC200應(yīng)用程序正常初始化失敗-0xc0150002_第2頁(yè)
VC200應(yīng)用程序正常初始化失敗-0xc0150002_第3頁(yè)
VC200應(yīng)用程序正常初始化失敗-0xc0150002_第4頁(yè)
VC200應(yīng)用程序正常初始化失敗-0xc0150002_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余3頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、最近幾天被這個(gè)問(wèn)題困惑了許久。不禁感嘆微軟的東東真是越做越爛了,也終于明白了時(shí)隔 12 年大家仍然死守 VC6 的原因。用 VC2005 編譯的程序,編譯時(shí)沒(méi)有任何錯(cuò)誤,但是運(yùn)行時(shí)就是提示應(yīng)用程序正常初始化失敗”!查找了各方面資料,做了各種嘗試,網(wǎng)上說(shuō)什么的都有:有讓安裝 vc2005sp1 補(bǔ)丁的;有讓安裝 vcredist_x86.exe 的;有讓把 CRT 庫(kù)的 dll 直接拷貝到程序目錄的;有讓清理注冊(cè)表的;有讓裝.NetFramework 新版本的;有讓查manifest 的;結(jié)果我嘗試了半天,幾乎都是浪費(fèi)時(shí)間。上面最后一條說(shuō)的還算正確,只是作者把事情描述得太繁瑣了?,F(xiàn)在把處理的方法

2、說(shuō)一下,省得大家再走彎路:1 .VC2003、VC2005、VC2008 及其后續(xù)版本,對(duì)底層最基本的 CRT、MFC、ATL 庫(kù)都進(jìn)行了重構(gòu),為了避免不同版本的庫(kù)引起沖突,重構(gòu)后的庫(kù)文件一般放在C:windowsWinSxS 文件夾中,并用特定的文件夾文件名稱進(jìn)行標(biāo)識(shí);2 .與 VC6 不同,VC2003、VC2005、VC2008 及其后續(xù)版本,引入了 manifest清單的概念,即應(yīng)用程序編譯后會(huì)同時(shí)生成對(duì)應(yīng)的.manifest 文件,并將該.manifest 文件作為資源編譯到 dll 或者 exe 中去。.manifest 文件實(shí)際上是一個(gè) XML 格式的文本文件,里面記錄了 dll

3、 或 exe 中要引用的 CRT、MFC、ATL 庫(kù)的版本和名稱。VC6 編譯的應(yīng)用程序?qū)?CRT、MFC、ATL 的 dll 都是直接調(diào)用,而 VC2003、VC2005、VC2008編譯的程序都是先查詢編譯到資源中的 manifest 中的記錄,然后按照記錄提供的版本和名稱去搜尋對(duì)應(yīng)的 CRT、MFC、ATL 庫(kù)以及隨庫(kù)發(fā)布的.manifest 文件,搜尋的路徑包括當(dāng)前目錄、C:windowsWinSxS 等等,如果沒(méi)有找到對(duì)應(yīng)的庫(kù)文件,則提示應(yīng)用程序正常初始化失敗”;3 .因此解決這個(gè)問(wèn)題的辦法就是:(a)用文本編輯器打開(kāi) exe 或 dll 對(duì)應(yīng)的.manifest 文件,查看它引用的

4、 CRT、MFC、ATL 庫(kù)的版本;或者,用 UltraEdit 直接打開(kāi) exe 或者 dll,從資源區(qū)中找到編譯進(jìn)去的.manifest 信息,找到它引用的CRT、MFC、ATL 庫(kù)的版本;或者,運(yùn)行程序,當(dāng)程序彈出應(yīng)用程序正常初始化失敗”對(duì)話框時(shí),在桌面上右鍵點(diǎn)擊我的電腦-管理”-事件查看器”-系統(tǒng)”,雙擊查看其中的記錄,可以看到出錯(cuò)的原因是因?yàn)槿鄙倭四衬嘲姹镜?CRT、MFC、ATL 庫(kù),記錄下這個(gè)版本信息;(b)記錄到的庫(kù)的版本信息一般類似于“Microsoft.VC90.DebugCRT,之后至 UC:windowsWinSxS 或者 VC200X 的安裝文件夾中搜索包含這個(gè)字符串

5、的文件夾和文件, 將搜索到的 dll 和.manifest 文件都拷貝到應(yīng)用程序所在的文件夾中,其中 1.manifest 文件必須重命名為“Microsoft.VC90.DebugCRT.manifest 這里以 (Microsoft.VC90.DebugCRT 為例) ,這樣應(yīng)用程序就可以正常運(yùn)行了;(c)注意:庫(kù)的.manifest 文件和 dll 要一同拷貝到應(yīng)用程序根目錄去,因?yàn)閼?yīng)用程序會(huì)將編譯到內(nèi)部的 manifest 信息與外部的.manifest 文件進(jìn)行對(duì)比,之后才會(huì)對(duì)庫(kù)的 dll 進(jìn)行調(diào)用。如果只拷貝庫(kù)的 dll 文件是沒(méi)有用的;4.如果本機(jī)編譯和運(yùn)行程序都 ok,但是將編

6、譯好的程序拿到其它機(jī)器上確無(wú)法運(yùn)行,則多半也是這個(gè)原因。另外,如果提示應(yīng)用程序配置不正確”,大多也是因?yàn)樯厦嫠f(shuō)的 CRT、MFC、 ATL 庫(kù)版本與應(yīng)用程序不匹配導(dǎo)致的,可以如法炮制進(jìn)行解決;在網(wǎng)上找出了這些方法:方法一:在類似 C:ProgramFilesMicrosoftVisualStudio8VCredistDebug_NonRedistx86Microsoft.VC80,DebugCRT 下找到了下列文件:msvcm80d.dllmsvcp80d.dllmsvcr80d.dllMicrosoft.VC80.DebugCRT.manifest 把這幾個(gè)文件拷貝到目標(biāo)機(jī)器上, 與運(yùn)行程

7、序同一文件夾或放到 system32 下,就可以正確運(yùn)行了。其他 release 版、MFC 程序什么的都是拷 redist 下相應(yīng)文件夾下的文件就可以了,文件夾后都有標(biāo)識(shí)!方法二:修改編譯選項(xiàng),將/MD 或/MDd 改為/MT 或/MTd,這樣就實(shí)現(xiàn)了對(duì) VC 運(yùn)行時(shí)庫(kù)的靜態(tài)鏈接,在運(yùn)行時(shí)就不再需要 VC 的 dll 了。方法三:工程屬性配置屬性常規(guī)MFC 的使用,選擇在靜態(tài)庫(kù)中使用 mfc”這樣生成的 exe 文件應(yīng)該就可以在其他機(jī)器上跑了。方法四:你的 vc8 安裝盤(pán)上找到再分發(fā)包 vcredist_xxx.exe 和你的程序捆綁安裝在大部分機(jī)上都可以運(yùn)行了,唯獨(dú)在我的測(cè)試機(jī)上還是報(bào)應(yīng)用

8、程序配置錯(cuò)誤。剛開(kāi)始懷疑是還缺少 dll,在能跑的機(jī)上把 windows/system32 目錄下所有的 msvc*.dll 都復(fù)制到這臺(tái)機(jī)的運(yùn)行目錄,還是不行!極度郁悶X-!后來(lái)實(shí)在沒(méi)轍了,就在 VC 環(huán)境中才 T 開(kāi)了 EXE 來(lái)查看它內(nèi)嵌的 manifest 資源,無(wú)奈了看了一會(huì),帶著心中對(duì) manifest 的咒罵,突然發(fā)現(xiàn)這個(gè) manifest 帶了兩個(gè)版本 CRT 的依賴:再打開(kāi) Microsoft.VC80.CRT.manifest 一看,是這樣:就是說(shuō),我們 EXE 的 Manifest 里多了一個(gè)版本依賴,那就把后面那個(gè)依賴刪除試試。于是就把工程設(shè)置的生成 manifest

9、的選項(xiàng)去掉,手工改了一下 manifest 放到程序目錄下,發(fā)現(xiàn)果然可以運(yùn)行了!還有個(gè)問(wèn)題沒(méi)有明白,就是 VC 為什么在自傻脆 anifest 里帶了兩個(gè)依賴呢,上網(wǎng)再查了一下,發(fā)現(xiàn)在msdnonline 上說(shuō)8.0.50608.0這個(gè)版本是在 XP 下用的,8.0.50727.762這個(gè)版本是在 Vista 下用的(http:/ XP 下運(yùn)行的好好的!想不通是它錯(cuò)了還是別的原因。后來(lái)在 CRT 的源碼里面搜索8.0.50727.762,找到了8.0.50608.0也在那里。#ifdefined_USE_RTM_VERSION#define_CRT_ASSEMBLY_VERSION8.0.50

10、608.0”#else#define_CRT_ASSEMBLY_VERSIOI8.0.50727.762”#endif顯然默認(rèn)的版本是“8.0.50727.762:除非定義了_USE_RTM_VERSION!那為什么我們的工程會(huì)生成兩個(gè)版本的依賴呢,明明這個(gè)地方是二選一的。一開(kāi)始懷疑是工程設(shè)置引起的,我就把我們的工程拷出來(lái),把里面的文件刪掉,再?gòu)?fù)制一些向?qū)傻奈募M(jìn)來(lái),編譯一看,manifest里只有一個(gè)8.0.50727.762,說(shuō)明工程設(shè)置沒(méi)有問(wèn)題!最后我懷疑是工程鏈接的那些庫(kù)的問(wèn)題,因?yàn)橛行?kù)是用 VC6 或者 VC2003 編譯的,但是有些庫(kù)沒(méi)有代碼,編不了,沒(méi)法嘗試了。VC+解決應(yīng)

11、用程序配置不正確,程序無(wú)法啟動(dòng)2009-03-0310:05在使用 VC+200 琳境下生成的程序, 放置到未安裝 VC 環(huán)境的機(jī)器下后, 有時(shí)候會(huì)出現(xiàn)程序無(wú)法執(zhí)行的錯(cuò)誤,其提示是:應(yīng)用程序配置不正確,程序無(wú)法啟動(dòng),重新安裝應(yīng)用程序可能解決問(wèn)題。實(shí)際上,重裝是解決不了問(wèn)題的,解決的一種方法是查看*ermediate.manifest 文件,比如文件的內(nèi)容是:version=8.0.50727.762processorArchitecture=x86publicKeyToken=1fc8b3b9a1e18e3b/需要注意這個(gè)文件中的 3 個(gè)關(guān)鍵詞:Microsoft.VC80.CR

12、T,Microsoft.VC80.MFC 和 Microsoft.VC80.DebugCRT。尋找到.”P(pán)rogramFilesMicrosoftVisualStudio8VCredist 文件夾下面, 找到這些名稱的子文件夾,拷貝它們下面所有的文件到希望發(fā)布的 EXES:件下面,一起打包。這些文件也就是 mfc80.dll,msvcr80.dll,msvcp80.dll 和 Microsoft.VC80.CRT.manifest 等。此錯(cuò)誤發(fā)生的原因是在目標(biāo)機(jī)器上需要這些文件的支持。VisualC+LibrariesVisualC+LibrariesasSharedSide-by-SideA

13、ssembliesInVisualC+2005,theATL,MFC,StandardC+,andCRTlibrariessupportthenewdeploymentmodelavailableonWindowsXP,WindowsServer2003,andWindowsVista.TheDLLscorrespondingtoallVisualC+librarieshavebeengroupedintoseveralsharedside-by-sideassembliesandareinstalledintothenativeassemblycache,alsocalledtheWinSx

14、Sfolder,undertheoperatingsystemrootdirectory.Similarly,whilebuildingaC+applicationusingVisualC+2005,bydefaultthecompilerandthelinkergenerateamanifestfilethatdescribesruntimedependenciesofthisapplicationonVisualC+libraries.VisualC+librariescannotbeusedbyaC/C+applicationwithoutamanifestbindingtheappli

15、cationtotheselibraries.IfaC/C+applicationthatdependsonaVisualC+librarydoesnotuseamanifest,thenanattempttoloadtheVisualC+libraryasadependentDLLfromtheapplication-localfolderwillresultinanerrormessageindicatingthatthisisanunsupportedwayofloadingaVisualC+library.-Note:OnversionsofWindowsthatdonotsuppor

16、tdeploymentofsharedside-by-sideassemblies,suchasWindows98andWindows2000Server,theVisualC+librariesareinstalledintheSystem32folderandWinSxSfolderundertheoperatingsystemrootdirectory.ThissetupenablesrunningVisualC+applicationsontheseoperatingsystemversionsbecausetheydonotsupportmanifest-basedbindingof

17、applicationstodependentDLLs.Ontheseoperatingsystems,whenanapplicationisloaded,thecorrespondingmanifestfileisignoredandtheoperatingsystemssearchesfordependentDLLsusingpathssetinthecurrentrunningenvironment.However,onupgradingtheoperatingsystemtoaversionthatsupportmanifest-basedbinding,suchasWindowsXP

18、,WindowsServer2003,orWindowsVista,applicationsbuiltwithmanifestsstartusingtheDLLsinstalledintheWinSxSfolder.ThischangetothedeploymentmodelofVisualC+librariespreventstheproblemofversionconflictsbetweenDLLsthatoccurwhenyouaddupdatesorconfigurationstoamachine,andwillallowsupportofside-by-sideinstallati

19、onoftwodifferentVisualC+toolsets.Itwillalsoallowyoutoproducereliable,self-describingapplicationsandcomponentsthatwillnotconflictwithexistingcomponents.Formoreinformationontheadvantagesofnewdeploymentmodel,pleaseseeConceptsofIsolatedApplicationsandSide-by-sideAssemblies.TolearnabouthowthismayimpactdeploymentofexistingnativeC+applications,pleaserefertoRedistributingVisualC+Files.VisualC+librarieshavebeenpackagedinseveralsharedside-by-sideassemblieswithcorrespondingmanifestfiles.AssemblyNameMicrosoft.VC90.ATLMicrosoft.VC90.CRTMicrosoft.VC90.Deb

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論