Using COM Objects from aSP.NET

iStock_000005899630MediumI got the following question yesterday:

Hi, I created a web application in which I am generating a ms-word document using Microsoft.Office.Interop.Word dll. The application is running fine in the visual studio but when I tried to run on IIS 5.0 through virtual directory then its giving the following error – Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005. In my application I have taken reference of Microsoft Word 12.0 Object Library, but its coming as Microsoft.Office.Interop.Word dll, this interop dll is just a wrapper of the actual word COM dll. But I have to register the actual word COM dll. so my problem is to find – 1) The path of the original word dll(COM) 2) How to register this dll, either using regsvr32 or to register on IIS. OR there will be any other solution. I have gone through many forums but did’nt get any solution. If you have any idea/suggestion on COM Word components please revert me back.

First, you really shouldn’t be using COM from ASP.NET.  That’s not to say that you can’t, but there are so many issues when you do this that you are really better off avoiding it if at all possible. Find a third party dll that is written in .NET.

Second, I’d be willing to bet that when you developed this application, you developed it as a file based project instead of developing it under IIS.


You always want to develop your web applications under IIS so that you run into these types of problems while you are developing instead of after the fact.  If your operating system doesn’t have IIS available, upgrade to one that does!

The error message is telling you that you don’t have permission to run the COM object.  This was easily found using Google to search for the error code along with some possible solutions.

The problem is that ASP.NET is not running as a user that has access to the COM object.  In fact, ASP.NET can’t run any code outside of the virtual directory you created the application in by design.  You COULD grant the ASPNET_WP user access to the COM objects, but I would recommend against that for security reasons.

What I would recommend that you do instead is run Microsoft Word under COM+ as a specific user with rights to Word that can be accessed via COM+ remoting (even though it is all on the same computer) so that ASP.NET security isn’t compromised.

I did something similar when I wrote VSS.NET so that my web service could access the VSS COM DLL.  You can see a description of how I did this by checking out this article (see the section labeled, “COM+ vs ASPNET user”).

All of this assumes, of course, that you installed MS-Word on the IIS server and installed it so that everyone could run it so that the registry entries are visible to any user who is logged in on that computer.

Related Post

One Response to “Using COM Objects from aSP.NET”

Leave a Reply

Comment Policy:

  • You must verify your comment by responding to the automated email that is sent to your email address. Unverified comments will never show.Leave a good comment that adds to the conversation and I'll leave your link in.
  • Leave me pure spam and I'll delete it.
  • Leave a general comment and I'll remove the link but keep the comment.

Notify me of followup comments via e-mail