在Windows 2008 x64上使用Query Express,選擇Mcirosoft Oracle driver時,出現以下錯誤訊息:

Unable to connect: The 'MSDAORA' provider is not registered on the local machine.

前往Google大廟參拜,得到的結論懷疑因程式預設以x64模式執行,試圖讀取x64版本OLE DB Driver時失敗(沒安裝或該Driver根本沒出x64版)。網上建議的解決方法多半是重Build Project,將Target由Any CPU改為x86。

雖然手上在用的QueryExpress是自己修改過的版本,要重Build不是難事。但我不禁在在想,如果手上只有exe沒有Source Code? 就只能攤手嗎?

再做了一下功課,發現有個工具corflags可以透過修改執行檔檔頭(CLR Header)的方式達到類似的效果。開啟Visual Studio 2008 Command Prompt(裡面有額外設定PATH,才能找到.NET SDK的工具檔),先用corflags QueryExpress.exe看設定,再用corflags /32BIT+ QueryExpress.exe,標註強迫在WoW64下以x86方式執行。

C:\QueryExpress>corflags QueryExpress.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 1
ILONLY    : 1
32BIT     : 0
Signed    : 0

C:\QueryExpress>corflags /32BIT+ QueryExpress.exe
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

改過設定後再跑一次,這回就可以順利執行了。


Comments

Be the first to post a comment

Post a comment