如何从x64打开32位OLEDB提示符

时间:2015-12-16 22:24:53

标签: c# x86 64-bit oledb adodb

大家好日子,

我正在编写一个C#应用程序,它允许用户动态设置他们想要连接的数据库(我将使用数据库数据等工作,但这并不重要)。重要的是我允许我的用户使用下面的代码连接到OLEDB的数据存储。

ADODB.Connection connection;
MSDASC.DataLinks instance = new MSDASC.DataLinksClass();
if( (connection = instance.PromptNew() as ADODB.Connection) == null ) return;

这将打开Windows为* .udl文件打开的相同对话框,这正是我想要的。      但是,我遇到了一个有趣的问题,你的亮度可以派上用场:一些客户将不得不浏览x86驱动程序,绝大多数肯定会使用x64。

我知道您可以使用以下命令行打开x86 UDL文件: “C:\ Windows \ syswow64 \ rundll32.exe”“C:\ Program Files(x86)\ Common Files \ System \ Ole DB \ oledb32.dll”,OpenDSLFile“C:\ myConnectionFile.udl”

当默认(64位)命令为:

“C:\ Program Files \ Common Files \ System \ Ole DB \ oledb32.dll”,OpenDSLFile“C:\ myConnectionFile.udl”

换句话说:windows'允许用户以两种方式创建条目。我想在我的应用程序中使用API​​执行相同的操作。       我已经考虑过创建一个临时UDL文件并从上面的命令行打开的选项,这使我与我的技术主管的谈话相当不愉快,所以这不是一个选项。

欢迎所有建议。我不会忽视不安全的编码,也不会想到在C ++中使用构建包装器的想法(尽管我的C ++现在不方便生锈)。

提前感谢大家和快乐的编码...

1 个答案:

答案 0 :(得分:0)

开胃菜的好伙伴们,

经过繁琐漫长的研究过程后,我找到了我正在寻找的答案。  为了从单个C#64位应用程序使用OLEDB提供程序用于32位和64位平台,我需要为32位调用创建一个进程外包装器,并通过IPC(内部进程调用)进行调用。因为我暴露的功能数量适中,所以阻碍只是在包装器上重新创建了一些方法调用。

This blog帮助我将各部分组合在一起,现在我能够确定我允许用户创建的OLEDB连接类型,并且我也能够执行无论提供者架构如何,我都需要所有操作。

我希望这对其他可能遇到此问题的人有所帮助。

如果时间(和NDA)允许,我会在这里获取代码供人们复制并稍后再试。

这些链接在我的研究中也非常有用

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/

注册DLL服务器以进行代理激活 https:// msdn.microsoft.com/en-us/library/windows/desktop/ms686606(v=vs.85).aspx)

编写服务组件 https:// msdn.microsoft.com/en-us/library/3x7357ez(VS.80).aspx)

如何:创建服务组件 https:// msdn.microsoft.com/en-us/library/ty17dz7h(VS.80).aspx)

在C#/ .Net中创建进程外COM?http:// stackoverflow.com/questions/446417/create-out-of-process-com-in-c-net

谢谢大家

d