在網(wǎng)上找出了這些方法:
方法一:
在類似C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
把這幾個(gè)文件拷貝到目標(biāo)機(jī)器上,與運(yùn)行程序同一文件夾或放到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安裝盤上找到再分發(fā)包vcredist_xxx.exe和你的程序捆綁安裝
在大部分機(jī)上都可以運(yùn)行了,唯獨(dú)在我的測(cè)試機(jī)上還是報(bào)應(yīng)用程序配置錯(cuò)誤。剛開始懷疑是還缺少dll,在能跑的機(jī)上把windows/system32目錄下所有的msvc*.dll都復(fù)制到這臺(tái)機(jī)的運(yùn)行目錄,還是不行!極度郁悶※×…!后來(lái)實(shí)在沒(méi)轍了,就在VC環(huán)境中打開了EXE來(lái)查看它內(nèi)嵌的manifest資源,無(wú)奈了看了一會(huì),帶著心中對(duì)manifest的咒罵,突然發(fā)現(xiàn)這個(gè)manifest帶了兩個(gè)版本CRT的依賴:
再打開Microsoft.VC80.CRT.manifest一看,是這樣:
就是說(shuō),我們EXE的Manifest里多了一個(gè)版本依賴,那就把后面那個(gè)依賴刪除試試。于是就把工程設(shè)置的生成manifest的選項(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://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx),可是我用的是'8.0.50727.762'在XP下運(yùn)行的好好的!想不通是它錯(cuò)了還是別的原因。后來(lái)在CRT的源碼里面搜索'8.0.50727.762',找到了~'8.0.50608.0'也在那里。
#if defined _USE_RTM_VERSION
#define _CRT_ASSEMBLY_VERSION “8.0.50608.0”
#else
#define _CRT_ASSEMBLY_VERSION “8.0.50727.762”
#endif
顯然默認(rèn)的版本是“8.0.50727.762”,除非定義了_USE_RTM_VERSION!那為什么我們的工程會(huì)生成兩個(gè)版本的依賴呢,明明這個(gè)地方是二選一的。一開始懷疑是工程設(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)法嘗試了。
方法一:
在類似C:\Program Files\Microsoft Visual Studio 8\VC\redi
st\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT 下找到了下列文件:
msvcm80d.dll
msvcp80d.dll
msvcr80d.dll
Microsoft.VC80.DebugCRT.manifest
把這幾個(gè)文件拷貝到目標(biāo)機(jī)器上,與運(yùn)行程序同一文件夾或放到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安裝盤上找到再分發(fā)包vcredist_xxx.exe和你的程序捆綁安裝
在大部分機(jī)上都可以運(yùn)行了,唯獨(dú)在我的測(cè)試機(jī)上還是報(bào)應(yīng)用程序配置錯(cuò)誤。剛開始懷疑是還缺少dll,在能跑的機(jī)上把windows/system32目錄下所有的msvc*.dll都復(fù)制到這臺(tái)機(jī)的運(yùn)行目錄,還是不行!極度郁悶※×…!后來(lái)實(shí)在沒(méi)轍了,就在VC環(huán)境中打開了EXE來(lái)查看它內(nèi)嵌的manifest資源,無(wú)奈了看了一會(huì),帶著心中對(duì)manifest的咒罵,突然發(fā)現(xiàn)這個(gè)manifest帶了兩個(gè)版本CRT的依賴:
再打開Microsoft.VC80.CRT.manifest一看,是這樣:
就是說(shuō),我們EXE的Manifest里多了一個(gè)版本依賴,那就把后面那個(gè)依賴刪除試試。于是就把工程設(shè)置的生成manifest的選項(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://msdn.microsoft.com/en-us/library/ms235342(VS.80).aspx),可是我用的是'8.0.50727.762'在XP下運(yùn)行的好好的!想不通是它錯(cuò)了還是別的原因。后來(lái)在CRT的源碼里面搜索'8.0.50727.762',找到了~'8.0.50608.0'也在那里。
#if defined _USE_RTM_VERSION
#define _CRT_ASSEMBLY_VERSION “8.0.50608.0”
#else
#define _CRT_ASSEMBLY_VERSION “8.0.50727.762”
#endif
顯然默認(rèn)的版本是“8.0.50727.762”,除非定義了_USE_RTM_VERSION!那為什么我們的工程會(huì)生成兩個(gè)版本的依賴呢,明明這個(gè)地方是二選一的。一開始懷疑是工程設(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)法嘗試了。