从.NET Windows服务调用COM组件

时间:2011-06-20 14:12:45

标签: .net windows com service

我有一个用.NET C#编写的Windows服务,它调用一个COM组件。我还有一个.NET Windows Forms测试应用程序,我用它来测试COM组件。它在测试应用程序中运行良好。但是,当我在Windows服务中使用相同的代码时,没有任何反应。 COM组件将所有内容记录到文件中,并且日志文件未生成的事实暗示COM组件甚至没有被调用。

为什么这可以在我的测试应用中运行,但不能在Windows服务中运行?

2 个答案:

答案 0 :(得分:4)

服务通常与桌面隔离,因此从服务调用时,对COM组件的调用与UI隔离。您可以allow a service to "interactWithDesktop“查看使用互动服务部分。

Microsoft(<sarcasm>in their infinite wisdom</sarcasm>)决定从Window vista中删除此功能,并建议separating your application into multiple parts and using other mechanisms完成UI与服务之间的通信。显然,有些人(包括我自己)不同意,但是,这就是它......

http://msdn.microsoft.com/en-us/library/ms683502.aspx

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/e50d8819-d628-48e2-aa2c-6ac6de8380d9/

答案 1 :(得分:0)

您是否在LocalSystem帐户(Windows服务的默认设置)中运行服务?您的COM组件可能需要访问可以正常运行它的帐户中可用的资源...

尝试在Log On tab上修改您的服务并指定您的帐户。