MDAC OLEDB命令提示符32位问题

几年前,我写了一个C#.NET程序,它使用Microsoft ACE和JET OLEDB将Excel电子表格转换为CSV文件。最近我们升级到Windows Server 2008 x64服​​务器。由于JET已被弃用,因此该方法不再有效。最初使用JET处理来自Excel 2003的.xls文件,并使用ACE处理.xlsx Excel 2007文件。我更改了连接字符串以使用ACE。 我们现在可以通过命令提示符成功运行程序。但是,当我们使用自动化软件(显然运行类似于Start-> Run方法的程序)时,我们会收到一条错误消息,指出未安装Microsoft数据访问组件。研究这些后,它们似乎只能在32位系统上运行,并且不支持Windows Server 2000以上的任何功能。 有任何想法吗?我们安装了最新的beta x64 ACE OLEDB驱动程序。该程序手动运行良好。我也尝试用x86的目标平台编译程序。我们还使用自动化软件使用的Windows帐户成功手动运行程序。     
已邀请:
在64位Windows上,该过程定义位数:32或64。 如果你以64位模式启动程序,并且该程序执行COM(OLEDB是基于COM的),它将只查找COM 64位DLL(事实上,它只使用64位注册表中的64位-bit COM组件已注册)。 如果以32位模式启动程序,并且该程序执行COM,它将仅查找COM 32位DLL。 现在,它可以依赖于C#编译器的版本,但是今天,大多数C#程序被配置为编译为“Any Cpu”。这意味着它们将在32位操作系统上运行为32,在64位操作系统上运行64,如果它们直接或间接使用COM(有时候,您甚至不知道您正在使用COM!),这会使事情变得非常复杂。 。 所以...总结一下: 1)确定进程的位数(使用任务管理器很容易,64位计算机上的32位进程后缀为“* 32”)。 2)安装相应的COM OLEDB驱动程序。 如果OLEDB驱动程序在64位模式下不存在,那么您必须重新编译C#.EXE或修补它以强制使用32位模式。您可以使用CORFLAGS工具。     

要回复问题请先登录注册