讓程式不使用 side by side execution
1.
編譯時不要將 manifest embed 進程式,改產生 .manifest 檔。
2.
修改 .manifest 檔,將 publicKeyToken 這個項目及其內容拿掉。如果 .manifest 中有參考到兩個 CRT,將比較舊版本的 dependency 砍掉。(但不知道為何會產生兩個?!)
3.
至 C:\Windows\WinSxS 中,將對應的 CRT 版本目錄下,全部的 dll 檔 copy 至程式執行目錄。我的例子是將 x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 這個目錄底下的 dll 全複製。
4.
至 C:\Windows\WinSxS\Manifests 目錄下,找出對應 CRT 版本的 .manifest 檔,複製至程式執行目錄。我的例子是 x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest。
5.
將剛剛 copy 的 .manifest 更名為 Microsoft.VC80.CRT.manifest。
6.
修改 Microsoft.VC80.CRT.manifest,將 publicKeyToken 這個項目砍掉。
7.
執行程式,這樣應該就算在很乾淨的 OS 底下,都能夠跑了!
To-do:
這樣子的情況遇到個困難,下面是我的程式及函式庫關係:
Program --> LibA --> PublicLib -> MFC80.dll
LibA 是我寫的,參考到 PublicLib。PublicLib 動態連結了 MFC80.dll。當我利用上面方式來執行 program 時,是會跑出錯誤的!
如果看我程式產生出來的 .manifest,會發現裡頭沒有 MFC 的 dependency。Try 很多方式,包括手動在 .manifest 加入 MFC 的 dependency,都不成功!
如果有人知道怎麼解這種情形的,請不吝告知,感恩吶~
編譯時不要將 manifest embed 進程式,改產生 .manifest 檔。
2.
修改 .manifest 檔,將 publicKeyToken 這個項目及其內容拿掉。如果 .manifest 中有參考到兩個 CRT,將比較舊版本的 dependency 砍掉。(但不知道為何會產生兩個?!)
3.
至 C:\Windows\WinSxS 中,將對應的 CRT 版本目錄下,全部的 dll 檔 copy 至程式執行目錄。我的例子是將 x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 這個目錄底下的 dll 全複製。
4.
至 C:\Windows\WinSxS\Manifests 目錄下,找出對應 CRT 版本的 .manifest 檔,複製至程式執行目錄。我的例子是 x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest。
5.
將剛剛 copy 的 .manifest 更名為 Microsoft.VC80.CRT.manifest。
6.
修改 Microsoft.VC80.CRT.manifest,將 publicKeyToken 這個項目砍掉。
7.
執行程式,這樣應該就算在很乾淨的 OS 底下,都能夠跑了!
To-do:
這樣子的情況遇到個困難,下面是我的程式及函式庫關係:
Program --> LibA --> PublicLib -> MFC80.dll
LibA 是我寫的,參考到 PublicLib。PublicLib 動態連結了 MFC80.dll。當我利用上面方式來執行 program 時,是會跑出錯誤的!
如果看我程式產生出來的 .manifest,會發現裡頭沒有 MFC 的 dependency。Try 很多方式,包括手動在 .manifest 加入 MFC 的 dependency,都不成功!
如果有人知道怎麼解這種情形的,請不吝告知,感恩吶~
留言
張貼留言