關於我

我的相片
用心思考、保持熱情,把工作上的經驗作分享與紀錄。希望能夠跟大家一起不斷的成長~

如何在64位元作業系統中,指定Web應用程式用32位元模式執行

今天專案將Web應用程式部署至64位元的作業系統時,
果不其然的發生了問題,有支程式用 Microsoft.Jet.OLEDB.4.0 Provider 把Excel資料讀進來。
但在64位元的環境執行時,這段程式出了問題。
上Google一查,原來是 Microsoft.Jet.OLEDB.4.0 Provider 沒有For 64bit的版本。
查到的方法,就唯獨讓Web應用程式使用32bit mode一途,可解決此問題了。

在此情況下,以下介紹兩種可以讓Web應用程式使用32bit mode執行的方式!

  1. 在專案的屬性視窗中,選到建置的設定視窗,將平台目標(PlatformTarget)修改為x86即可。
    擷取1
  2. 直接修改佈署Web應用程式的應用程式集區(ApplicationPool),指定以32bit mode執行。
    (在寫此文章時,查看 IIS7.0 與 IIS7.5 兩版本,均有此選項可做調整)

    擷取 
    以上兩種方式,均可指定應用程式使用32bit 模式執行。

但如使用第一種方式,須注意到,因預設使用AnyCPU的選項,會依您佈署作業系統環境,
而對應使用不同的CPU mode。

所以當所有Library都設定為AnyCPU,僅有其中一個Library被修改指定使用x86模式時,
當佈署於x86的作業系統環境,應用程式全部都會使用x86運行,便可完全正常運作。
但當佈署至x64的作業系統環境時,便會有些以x64運行,有些要以x86運行,便會發生無法載入的錯誤情況。
因此要相當注意,有參考到的Library都必須一併指定為x86 mode,
不然應用程式在Runtime時,會發生x64無法跟x86溝通的問題。

但這問題就來了,如果是我們自己開發的程式,指定運行的Mode當然沒問題。
但如果是使用一些Third party的Tool,這時就很難保證他會用什麼模式運行了。

所以總結,是比較建議使用上方介紹的第二種做法,直接指定整體環境(在Web環境是ApplicationPool)使用x86運行,
應該會是比較保險的做法。

2 則留言:

  1. 大大您好為什麼小弟一直找不到你第一張圖的所在是部是哪裡有點錯?

    回覆刪除
  2. 您好,我的第一張圖,是對專案→點選右鍵→選擇屬性(Properties)→接著點選到建置(Build)的頁籤。您可以試看看依此步驟,看是否可正確找到這個設定處。

    回覆刪除