国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VS2008環(huán)境下開發(fā)的某些程序在其他機(jī)器運(yùn)行提示“由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動”的問題(IIS)
VC9編譯的程序在沒有裝過VC9(確切的說是.NetFramework3.5)的機(jī)器上運(yùn)行時,如果提示“由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動。重新安裝應(yīng)用程序可能會糾正這個問題。”這個錯誤,那么就說明該程序動態(tài)鏈接了VC9的運(yùn)行時庫,(如果還用到了MFC,那么可能動態(tài)鏈接了VC9的MFC庫,同理還有ATL庫),以及缺少對應(yīng)的manifest文件,程序在目標(biāo)機(jī)器上沒有找到這些庫和配置文件,因此導(dǎo)致了這個錯誤。出現(xiàn)這種情況的VC9編譯器可能存在3個版本,接下來分別闡明:
1、沒有打過任何補(bǔ)丁的VS2008
該版本對應(yīng)的CRT/MFC/ATL庫的版本號為9.0.21022.8,這個版本號在后面會用到。這個版本的程序部署比較簡單,直接把VC安裝目錄下的redist目錄(C:\Program Files\Microsoft Visual Studio9.0\VC\redist)中需要的庫以及對應(yīng)的manifest文件拷貝到執(zhí)行程序同目錄下,這樣程序到任何機(jī)器上都能夠正常運(yùn)行了。
2、打過SP1補(bǔ)丁的VS2008
打過該補(bǔ)丁后,系統(tǒng)中存在著兩個版本的CRT/MFC/ATL庫,版本號分別為9.0.21022.8和9.0.30729.1,這導(dǎo)致了manifest文件中記錄的版本號和實(shí)際庫的版本號不一致(程序要求它們的版本號一致才能運(yùn)行)。這個版本的程序部署需要兩個步驟,首先要使manifest文件中依賴項(xiàng)的版本號與實(shí)際庫的版本號一致,均為9.0.30729.1,方法是在工程設(shè)置中增加一個宏定義_BIND_TO_CURRENT_VCLIBS_VERSION,該宏定義于C:\Program Files\Microsoft VisualStudio9.0\VC\include\crtassem.h文件中,然后重新編譯程序。接下來還是將VC安裝目錄下的redist目錄(C:\ProgramFiles\Microsoft Visual Studio9.0\VC\redist)中需要的庫以及對應(yīng)的manifest文件拷貝到執(zhí)行程序同目錄下,然后修改manifest文件中依賴項(xiàng)的版本號為9.0.21022.8,這樣使得程序誤以為該目錄下庫的版本號為9.0.21022.8(實(shí)際上是9.0.30729.1版本),這樣程序到任何機(jī)器上都能夠正常運(yùn)行了。
3、打過SP1補(bǔ)丁與SP1 ATL 安全更新 (KB973675)的VS2008
這是最新的更新。在SP1補(bǔ)丁之后,微軟又于近日發(fā)布了一個用于智能設(shè)備的 Microsoft Visual Studio 2008Service Pack 1 ATL 安全更新 (KB973675),該補(bǔ)丁又將CRT/MFC/ATL庫的版本號升級,為9.0.30729.4148,這次升級比較好,manifest文件與庫的版本號一致了,不像SP1一樣升級的不徹底。這樣只需要在工程設(shè)置中增加一個宏定義_BIND_TO_CURRENT_VCLIBS_VERSION,接下來重新編譯程序,然后直接把VC安裝目錄下的redist目錄中需要的庫以及對應(yīng)的manifest文件拷貝到執(zhí)行程序同目錄下,這樣程序到任何機(jī)器上都能夠正常運(yùn)行了。
順便提一下,如果不想在發(fā)布程序時帶上這些庫和manifest文件(如果沒有必要的話),那么可以采用靜態(tài)編譯CRT和MFC,然后把manifest文件添加到資源中,這樣編譯出的程序只要一個exe就可以在任何機(jī)器上直接運(yùn)行了。
參考文章:
1、“應(yīng)用程序配置不正確,程序無法啟動”的解決方法資料收集:http://hi.baidu.com/fairysky/blog/item/e7a8366dbaa735f3431694c8.html
有的時候,你在VisualC++上面經(jīng)過好幾個月的辛勤努力,終于將程序編寫完成并且測試完畢,然而當(dāng)你試圖在客戶的發(fā)布機(jī)上運(yùn)行剛寫好的程序時,有可能會碰到類似下面的錯誤,操作系統(tǒng)告訴你“由于應(yīng)用程序配置不正確,應(yīng)用程序未能啟動。重新安裝應(yīng)用程序可能會糾正這個問題”:
一般情況下,這個問題都是由于程序不能找到所需要的C運(yùn)行庫(CRT)而引起的。
在Windows XP SP2以后,Windows引入了Side-by-Side執(zhí)行的概念,這個概念本來是.NET提出來的,但是Windows后來將這個概念集成到操作系統(tǒng)層面上來了。大家都應(yīng)該知道Dll Hell的問題,為了解決Dll Hell的問題,Side-By-Side提出不同版本的dll文件可以同時存在于同一個系統(tǒng)里面,而且依賴于不同版本dll的應(yīng)用程序在運(yùn)行的時候可以使用到它當(dāng)初被編譯生成的dll。前面的話,有點(diǎn)繞,舉個例子:
1.         假定你編寫了一個C++程序A,是使用MFC 8.0(這個版本是隨著Visual Studio 2005)發(fā)布的。
2.         之后你的機(jī)器升級了Visual Studio的版本,從2005升級到2008,2008的MFC庫是9.0版本的,這個時候你的操作系統(tǒng)里面安裝了兩個版本的MFC,分別是8.0和9.0。
3.         你在Visual Studio 2008編寫了另外一個C++程序B,B依賴與MFC 9.0。
4.         如果你運(yùn)行程序A的話,操作系統(tǒng)會將MFC 8.0加載到A的進(jìn)程里面。
5.         如果你這時同時運(yùn)行程序B,操作系統(tǒng)會將MFC 9.0加載到B的進(jìn)程里面。這就是Side-by-side的執(zhí)行概念。
操作系統(tǒng)之所以能夠這樣做,是因?yàn)樗诩虞d程序A和B之前,除了查看PE格式里面A和B所依賴的Dll信息,都會查看A和B的manifest文件。Manifest文件保存了Windows可執(zhí)行文件(包括exe和dll文件)要運(yùn)行起來的環(huán)境設(shè)置信息,文件名一般是可執(zhí)行文件的文件全名加上.manifest。例如notepad.exe的manifest文件就應(yīng)該是notepad.exe.manifest。例外有的程序?qū)anifest文件直接嵌入到可執(zhí)行文件的資源里面了,這也就是為什么有的時候你看不到程序的manifest文件的原因。通常來說,一個manifest文件的內(nèi)容如下(test.exe.manifest文件):
<?xml version=’1.0′ encoding=’UTF-8′ standalone=’yes’?>
<assembly xmlns=’urn:schemas-microsoft-com:asm.v1′ manifestVersion=’1.0′>
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
<security>
<requestedPrivileges>
<requestedExecutionLevel level=’asInvoker’ uiAccess=’false’ />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type=’win32′ name=’Microsoft.VC90.DebugCRT’ version=’9.0.21022.8′
processorArchitecture=’x86′ publicKeyToken=’1fc8b3b9a1e18e3b’ />
</dependentAssembly>
</dependency>
</assembly>
上面的例子里面,就說明這個程序依賴于CRT 9.0,而且是調(diào)試版的,CPU架構(gòu)是32位的CPU。對于將manifest文件嵌入到資源文件的程序我們也有辦法看到manifest的信息。
1.         一種是使用mt.exe(Visual Studio自帶的manifest處理程序):
mt -inputresource:test.exe;#1 /out:test.manifest
2.         另外一種是使用dumpbin程序?qū)⒄麄€exe的內(nèi)容打印到一個文件,然后用文本編輯器打開,搜索Assem字符串樣式就能找到manifest信息:
解決方案
知道了程序依賴于具體哪一個dll以后,你可以將所依賴的dll拷貝到程序的安裝文件夾里面,以CRT庫綁定失敗為例,介紹解決步驟:
1.        從上例中我們知道程序依賴的Microsoft.VC90.DebugCRT庫,版本號是9.0.21022.8,需要32位機(jī)器版本的CRT。這個依賴項(xiàng)一般是因?yàn)槟愕某绦蚴钦{(diào)試版,所以Visual Studio在編譯的時候,將調(diào)試版的CRT加入程序的依賴項(xiàng)。
2.         從Visual Studio的安裝文件夾里面將D:”Program Files”Microsoft VisualStudio9.0″VC”redist”Debug_NonRedist”x86中的Microsoft.VC90.DebugCRT整個文件夾拷貝到應(yīng)用程序所在的文件夾里面,注意:
a)         如果你的程序依賴的是32位的CRT,則要拷貝x86文件夾里面的Microsoft.VC90.DebugCRT文件夾,如果是先x64程序,則要拷貝x64文件夾里面。
b)        你需要確定Microsoft.VC90.DebugCRT文件夾里面的Microsoft.VC90.DebugCRT.manifest文件里面保存的版本信息而你程序依賴的版本信息匹配,Microsoft.VC90.DebugCRT.manifest里面的版本信息大版本號一定要一致,小版本號一定要等于或者大于你程序依賴的CRT的小版本號。比如上例中,我們的程序是依賴于CRT9.0.21022.8,而我們的Microsoft.VC90.DebugCRT.manifest的版本是9.0.30729.1,這樣是可以的;而8.0.30729.1就會有問題。如果大版本號一樣,小版本號不一致的話,一個比較簡單的方案就是修改程序的manifest文件,使其互相匹配就可以了。
3.         如果你的程序不是依賴調(diào)試版本的CRT,而是release版本的CRT,直接去微軟的官方網(wǎng)站下載一個crt redist包安裝上就可以了。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VC編寫的程序不能在其他機(jī)器上運(yùn)行的解決方案
"應(yīng)用程序正常初始化失敗"
VC分發(fā)包版本問題
VC6.0 工程轉(zhuǎn)到VS2008一些問題的描述及解決方法
VLD(Visual LeakDetector)內(nèi)存泄露庫的使用
應(yīng)用程序配置不正確,程序無法啟動
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服