標籤:blog http os 檔案 io art re c
VS2005 sidebyside manifest error Microsoft.VC80.MFC Microsoft.VC80.CRT Microsoft.VC80.MFCLOC msvcr80.dll mfc80.dll eventlog VC2005 編譯出來的程式檔案,採用了manifest方式來指定dll檔案。對於win98、win2000系統,把exe檔案和VC的 dll串連庫放到一起就 成了。對於winxp、win2003系統就要麻煩的多了,VC的串連庫預設是被放到了winsxs檔案夾下,結果造成在這些系統上,直接拷貝exe檔案, 往往是不能執行(找不到msvcr80.dll、mfc80.dll檔案等),或者在事件記錄中報錯。 解決方案: 方式一、在目標系統上安裝2005版vcredist_x86.exe。 方式二、直接拷貝VS8檔案夾下的VC / redist / x86 / 檔案夾下的 Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC幾個檔案夾,到exe所在的檔案夾下,檔案夾結構例如以下: ./myapp.exe ./myapp.dll ./Microsoft.VC80.CRT/ ./Microsoft.VC80.MFC/ ./Microsoft.VC80.MFC/Microsoft.VC80.MFCLOC/ 然後改動Microsoft.VC80.MFCLOC檔案夾下的Microsoft.VC80.MFCLOC.manifest檔案,將當中的version=“8.0.50727.42“,改動為version=“8.0.50608.0“。 方式二的檔案夾結構,在xp和2003下是沒有問題的,可是在win98/win2000中,由於exe和dll不在同一檔案夾下,就會出現找不到dll的問題。 有什麼更好的解決呢?呵呵,國外的一個大牛(http://blog.kalmbachnet.de)找到一絕招: 方式三、 1、首先編譯myapp.exe的時候,在配置中,選擇產生單獨的manifest檔案,如:myapp.exe.manifest。 2、將myapp.exe、myapp.exe.manifest複製到一個檔案夾下 3、將Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC幾個檔案夾下的檔案,都複製到myapp.exe所在的檔案夾下。 4、將Microsoft.VC80.MFCLOC.manifest檔案裡的version=“8.0.50727.42“,改動為version=“8.0.50608.0“。 5、編輯myapp.exe檔案夾下的全部 .manifest檔案,將檔案裡的publicKey索引值刪除,通常是publicKeyToken=“1fc8b3b9a1e18e3b“ 6、然後執行myapp.exe看看。