天天看點

VS 2005 編譯的程式不能運作的幾個解決方法

作者:局部變量

  這兩天有點焦頭爛額, 我們這邊運作的好好的程式, 到了測試的機器上就不能啟動(是根本運作不了, 而不是運作出錯), 弄得我異常郁悶。 經過了一番摸索, 發現和 winxp、win2003中為解決dll hell而引入的manifest機制有關系。而以前我們用vs2003開發, 它并沒有強制程式使用manifest, 但到了vs2005中, 這已經改成必需的了, 而我們并沒有按照需要進行相關的配置, 是以程式啟動不了了。 根據目前的經驗, vs2005編譯的程式不能啟動大緻有兩個原因, 下面簡單介紹解決辦法。

1、在開發組的機器上(安裝有vs2005)有時都不能啟動

這一般是項目的檔案被放在了fat/fat32分區上導緻的, 解決方法是把它們都移動到ntfs分區上, 或者把“項目屬性|Manifest Tool|General|Use FAT32 Work-around”設為yes。

2、開發組運作正常, 換到其它機器上就不行了

這一般就是系統dll(包括crt,mfc,atl等)沒有正确配置導緻的。 如果程式是release版, 那麼很簡單, 隻要把“/SDK/v2。0/BootStrapper/Packages/vcredist_x86”下的"vcredist_x86。exe"拷貝到目标機器上運作即可, 這是以x86平台為例的, 如果你用的是别的cpu平台(amd64或ia64)把x86替換成相應的内容就可以了。

如果是debug版, 就複雜一些了, 首先要确定你需要的dll的版本, 絕大多數(注意:不是"所有")情況下它和編譯器的版本相同, 通過vs2005的關于對話框就能看到, 如下圖所示:

VS 2005 編譯的程式不能運作的幾個解決方法

  确定版本後, 在開發組的機器上進入“%windir%/winsxs"檔案夾(下面将以x86平台8.0.50727.762版本的debug crt為例進行說明), 拷貝以下檔案到目标機器的相同位置即可:

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.manifest

Policies/x86_policy.8.0.Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_x-ww_09e017b4檔案夾下的8.0.50727.762.cat和 8.0.50727.762.policy

  注意, 上面的操作隻是在目标作業系統為winxp,win2003及以上時才需要的, 如果是win2000及以下的系統, 隻要把第一個檔案夾下的檔案拷貝到system32中就行了。

繼續閱讀