環境
一般系統部署的服務器若是windows系統,就會采用64位win2003的結構。可是我們編寫的程序絕大多數都是在x86下32位cpu架構中編譯的,要正常移植到64位機器還真的是很麻煩,不僅要求應用程序是64位模式編譯,還需要數據庫也得是64位,iis64位,framework64位,好在相應的廠商都提供這些支持組件。不知道有人遇到過像我這樣的問題么,應用中有需要增加一個Access數據庫導入功能,這就需要連接ODBC的mdb驅動,可是Microsoft OLE DB Provider for Jet不支持64位系統,即使安裝了office2007后,發現ODBC也沒有任何變化,這下尷尬了。
分析
對64位系統結構進行分析。
c盤下有兩個程序安裝目錄:Program Files和Program Files (x86);
windows文件夾下有兩個目錄:System32和SysWOW64;
在System32中的odbcad32.exe中沒有其他驅動(這也是控制面板中ODBC直接啟動的程序),但是在SysWOW64下的odbcad32.exe卻存在mdb之類的所有驅動,這說明ODBC驅動在操作系統中是存在的,只是因為運行模式導致調用的odbc程序不同,造成找不到對應的驅動。了解到這一點,就能找到解決方案:切換64位運行模式為32位。
解決步驟
切換IIS運行模式為32位
開始→運行→cmd,運行腳本:
cscript %SYSTEMDRIVE%/inetpub/adminscripts/adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
即可將IIS由64位切換為32位模式;若想恢復為64位模式,運行腳本:cscript %SYSTEMDRIVE%/inetpub/adminscripts/adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0。若腳本報錯,切換路徑為C:/Inetpub/AdminScripts,因為adsutil.vbs文件在該路徑下。
Asp.net運行模式為32位
重新注冊asp.net,開始→運行→cmd
運行腳本:%SYSTEMROOT%/Microsoft.NET/Framework/v2.0.40607/aspnet_regiis.exe -i
。
若要注冊64位,腳本為:%SYSTEMROOT%/Microsoft.NET/Framework64/v2.0.40607/aspnet_regiis.exe -i
。
重啟機器,IIS即可運行32位的程序,ODBC的連接也生效了。
Oracle64位切換為32位的方法
若以前系統運行在64位模式下使用的是64位的oracle,修改為32位模式后程序的數據庫連接就失敗,會報:“如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行……”這個錯誤。想到的方法自然是再安裝32位的oracle客戶端了。其實最簡單的方法是下載ORALCE工具包Instant Client Package。將其解壓到任意文件夾下,如D:/oracle/instantclient_11_2。
設置對應的環境變量:右擊”我的電腦” – “屬性” – “高級” – “環境變量” – “系統環境變量”:
1、新建NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK(注意中間有空格,這個如果不設,toad查詢中文會是亂碼)
2、新建或修改TNS_ADMIN=D:/oracle/instantclient_11_2
新聞熱點
疑難解答