我正在编写一个 Windows 窗体 ClickOnce 应用程序,它使用 Oracle Instant Client 连接到数据库,因为在我们用户的机器上安装完整的客户端不是一种选择。不幸的是,我们的用户混合使用了 32 位和 64 位机器。虽然应用程序本身是 AnyCpu,但 Oracle 库不是。
目前,我们正在分发客户端的两个副本,唯一的区别是 Oracle DLL——32 位 DLL 用于 32 位用户,64 位 DLL 用于 64 位用户。
作为一个实验,我尝试在单独的目录中发布一个包含两组 DLL 的客户端,这确定了主机操作系统在运行时的位数,然后使用 LoadLibrary 加载 DLL。这有效,但只是一种。
在 64 位系统上,会弹出一个错误框,提示“程序无法启动,因为您的计算机中缺少 oranls11.dll”。当我单击“确定”关闭该框时,程序启动并正常运行。将 oranls11.dll 添加到要加载的 DLL 列表会导致弹出两个消息框副本,一个接一个。
那么,有没有更好的方式来加载 Oracle Instant Client 呢?如果没有,至少有没有办法抑制该消息框?