我正在尝试使用 C# 将 DBF 文件中的数据提取到我的程序中。我正在使用 Visual FoxPro OLE DB 提供程序。它在我的本地机器上运行良好,但我想将我的程序打包成客户端可以使用的 dll。问题是当他们从他们的机器上运行程序时,它说 Visual FoxPro OLE DB Provider 没有在他们的机器上注册。有没有什么方法可以在不让客户端在他们的机器上安装 Visual FoxPro OLE DB Provider 的情况下使用它?
2 回答
简短的答案是否定的……长答案是:
如果不在每台目标机器上安装 Visual FoxPro OLE DB 提供程序,我不相信你能做到这一点。即使您尝试使用 COM 互操作,您仍然需要安装和注册原始 dll - vfpoledb.dll
到目前为止,解决此问题的最简单方法是从 Microsoft 获取FoxPro OleDb 驱动程序安装包并将其分发给您的用户。
如果您想为您的库安装滚动您自己的 .MSI 包,您可以手动安装并注册缺少的 dll。
使用 .MSI 包中的 regsvr32.exe 手动注册 .DLL:
首先打开您的 WSI 项目并转到 MSI 脚本。
在“立即执行”选项卡中的 InstallFinalize 之后添加“从目标执行程序”自定义操作。
当“从目标执行程序”对话框出现时,输入:
Custom Action Name: <registerdll>
Working Directory: SystemFolder
EXE and Command Line: Enter the full path to regsvr32.exe
and the full path to .DLL.
(usually ..\Program Files\Common Files\System\Ole DB\vfpoledb.dll)
如果您将 /s 开关添加到 [SystemFolder]regsvr32.exe /s 之类的命令行,则应该无需用户干预即可注册 dll。
我在 64 位 Vista 机器上开发时遇到了类似的问题。我发现为了使用 Microsoft Jet OleDB 或 FoxPro OleDB 提供程序,我必须将我的 .Net 项目的属性设置为专门针对 32 位处理器,因为这些提供程序没有 64 位版本。
无论如何,不确定这是否是使用您的库的目标机器问题的一部分,但我想我会提供它。
布赖恩