COMException HRESULT:0x800A9D9F,Application.run方法从ASP.NET调用MS Access

时间:2017-06-03 14:01:49

标签: asp.net ms-access-2016

消息读取:System.Runtime.InteropServices.COMException:来自HRESULT的异常:0x800A9D9F

环境:访问2016,Windows 10,IIS 10.0; ASP.NET 4.7,URL http://127.0.0.1/openAccess3.aspx。代码位于ISS Web服务器上的ASP.NET文件中。没有互联网参与。浏览器和ISS都在我的桌面上。以下是有问题的代码:

Dim oAccessApp
oAccessApp = createObject("Access.Application")
oAccessApp.OpenCurrentDatabase "C:\inetpub\wwwroot\WPE_Dev\WPE_Support.accdb")
oAccessApp.Run("ReadJSON")
oAccessApp.Quit

如果我注释掉oAccessApp.Run(“ReadJSON”)。 Access就像您期望的那样打开和关闭。

在Access Trust Center中,我将宏设置设置为“启用所有宏(不推荐;可能会运行危险的代码)”这没有帮助。

3 个答案:

答案 0 :(得分:0)

在IIS中,我将Process Model Identity设置为管理员帐户。代码现在运行。我做出的另一个调整也有可能有所帮助,但这种改变才能让它发挥作用。

答案 1 :(得分:0)

我通过允许网络上的受信任位置解决了这个问题(不是来自ASP,而是来自.NET可执行文件)。

On Access:
File->Options->Trust Center->Trust Center Settings->Trusted Locations
激活Allow Trusted Locations on my network或者添加新位置(未尝试)

Add, remove, or change a trusted location

答案 2 :(得分:0)

不要这样做,它不受官方支持(我强调):

  

Microsoft 当前不推荐,并且不支持从任何无人参与的非交互客户端应用程序中自动执行Microsoft Office应用程序或组件(包括 ASP, ASP.NET ,DCOM和NT服务),因为在这种环境下运行Office时,Office可能表现出不稳定的行为和/或死锁。

来源:MS KB 257757

因此,“正确的”解决方案是将您的ReadJSON代码迁移到经典的ASP(VBScript)或更好的ASP.NET(C#或VB.NET)并在MS Access容器外运行。

(我知道这是一个潜在的成本很高的解决方案,即使正式不提供支持,解决方法也值得承担该风险。您只需要知道自己的工作在官方上不受支持,并且可能会停止工作随时。)