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