初步關(guān)于VS2005編譯程序的理解與學(xué)習(xí)
隨著時代的進(jìn)步科技的發(fā)展Visual Studio 版本也快速的提升與升級,下面我就對升級前和升級后的VS2005編譯程序,做一下自己的解析。希望能夠?qū)Υ蠹矣袔椭?nbsp;它并沒有強(qiáng)制程序使用manifest, 但到了VS2005中, 這已經(jīng)改成必需的了, 而我們并沒有按照需要進(jìn)行相關(guān)的配置, 所以程序啟動不了了。
根據(jù)目前的經(jīng)驗, VS2005編譯的程序不能啟動大致有兩個原因, 下面簡單介紹解決辦法。
1、在開發(fā)組的機(jī)器上(安裝有VS2005)有時都不能啟動
這一般是項目的文件被放在了fat/fat32分區(qū)上導(dǎo)致的, 解決方法是把它們都移動到ntfs分區(qū)上, 或者把“項目屬性|Manifest Tool|General|Use FAT32 Work-around”設(shè)為yes。
2、開發(fā)組運(yùn)行正常, 換到其它機(jī)器上就不行了
這一般就是系統(tǒng)dll(包括crt,mfc,atl等)沒有正確配置導(dǎo)致的。 如果程序是release版, 那么很簡單, 只要把“\SDK\v2。0\BootStrapper\Packages\vcredist_x86”下的"vcredist_x86。exe"拷貝到目標(biāo)機(jī)器上運(yùn)行即可, 這是以x86平臺為例的, 如果你用的是別的cpu平臺(amd64或ia64)把x86替換成相應(yīng)的內(nèi)容就可以了。
如果是debug版, 就復(fù)雜一些了, 首先要確定你需要的dll的版本, 絕大多數(shù)(注意:不是"所有")情況下它和編譯器的版本相同, 通過VS2005的關(guān)于對話框就能看到。
確定版本后, 在開發(fā)組的機(jī)器上進(jìn)入“%windir%\winsxs"文件夾(下面將以x86平臺8.0.50727.762版本的debug crt為例進(jìn)行說明), 拷貝以下文件到目標(biāo)機(jī)器的相同位置即可: x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f文件夾下的所有文件Manifests文件夾下的x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.cat和x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f.manifestPolicies\x86_policy.8.0.Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_x-ww_09e017b4文件夾下的8.0.50727.762.cat和 8.0.50727.762.policy
注意, 上面的操作只是在目標(biāo)操作系統(tǒng)為winxp,win2003及以上時才需要的, 如果是win2000及以下的系統(tǒng), 只要把第一個文件夾下的文件拷貝到system32中就行了。
附:msdn上有關(guān)vc應(yīng)用程序部署的幾片文章, 供參考
#t#Troubleshooting C/C++ Isolated Applications and Side-by-side Assemblies
Deployment Examples
以下是與這個問題相關(guān)的一些系統(tǒng)提示信息, 為了讓碰到這些問題的人更容易搜到關(guān)于VS2005編譯這篇文章, 我把它們列在這里.
參照的匯編沒有安裝在系統(tǒng)上
應(yīng)用程序要求的組件版本同另一個活動的組件有沖突。
系統(tǒng)無法執(zhí)行指定的程序
ERROR_SXS_ASSEMBLY_NOT_FOUND
14003
0x800736B3
The referenced assembly is not installed on your system.