带有Access 2007运行时的.NET访问自动化

带有Access 2007运行时的.NET访问自动化,.net,ms-access,com,automation,.net,Ms Access,Com,Automation,部署使用Microsoft Access automation的.NET应用程序时遇到问题 我已在目标计算机上安装Access 2007运行时和主互操作程序集(PIA): 但是,当我尝试创建ApplicationClass时: Application access = new ApplicationClass(); 我得到以下例外情况: 未处理的异常:System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索CLSID

部署使用Microsoft Access automation的.NET应用程序时遇到问题

我已在目标计算机上安装Access 2007运行时和主互操作程序集(PIA):

但是,当我尝试创建ApplicationClass时:

Application access = new ApplicationClass();
我得到以下例外情况:

未处理的异常:System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索CLSID为{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}的组件的COM类工厂失败:80080005

我在谷歌上搜索了错误代码,并尝试在dcomcnfg中调整安全设置,但没有效果

有什么想法吗


由于成本原因,我不想安装Access的完整版本,运行时至少应该能够创建应用程序的实例,当然?

如果没有提供要安装的接口的软件,PIA将无法工作

如果不希望在用户的计算机上安装Access,可以

  • 在VBA中将应用程序重写为Access应用程序,并使用Access运行时进行部署
  • 使用2007 Office System Driver:Data Connectivity组件访问数据库,但是此引擎不公开许多访问功能,例如报表、表单、查询中的函数等

如果您切换到ODBC/OLEDB/ADO,我建议您升级到SQL Server Express、SQL Server Compact Edition或其他免费数据库软件。

您无法启动access运行时的自动实例。所发生的事情是,创建实例时access不会启动。但是,由于它是运行时,访问将关闭。换句话说,您必须打开数据库才能使运行时保持打开状态

由于无法提供自动打开的文件名,因此解决方法是使用Shell()函数。通过shell()启动ms access的副本,这允许您在shell命令中提供accDB或mdb文件作为参数。然后,在.net代码中,使用等效的get对象代替create对象


因此,当我们试图在运行时自动化ms访问时,access开发人员也存在同样的限制。无法在代码中创建实例。但是,如上所示,由于上面的限制,在没有文件参数的情况下启动access运行时会关闭,因此必须使用Shell()

您是否为受信任的位置等设置了注册表项?您可以通过.NET使用PIA自动运行Access运行时,但您不能以编程方式启动运行时(请参见Albert的回答)。这是我的第一个建议,将前端代码从C#/VB移到VBA,以便它可以通过Access运行时运行。如果db中没有代码(很可能是因为用户发布了自动化代码NC),那么在启动db应用程序时,您不能运行任何操作。