2011-06-20 109 views
3

我有一個用.NET C#編寫的調用COM組件的Windows服務。我也有一個.NET Windows窗體測試應用程序,我正在使用它來測試COM組件。它從測試應用程序正常工作。但是,當我在Windows服務中使用相同的代碼時,什麼都不會發生。 COM組件將所有內容記錄到文件中,而日誌文件不會生成的事實表明COM組件甚至沒有被調用。從.NET Windows服務調用COM組件

爲什麼這項工作從我的測試應用程序,但不是在Windows服務?

+0

請詳細介紹COM組件。例如,它寫的是什麼。也許該組件假定它正在運行具有消息泵的進程。 –

+0

該組件是用Visual Studio 6編寫的ATL。它是一個exe組件(不是DLL或服務) – Jonnster

+0

因此,這是您第一次嘗試在桌面應用程序之外使用該組件嗎?從未在ASP.NET或Web服務中使用它?這表明您對消息泵或桌面應用程序之外不存在的其他東西有依賴性。 –

回答

4

服務通常與桌面獨立運行,因此在從服務調用時,對COM組件的調用與UI隔離。您可能allow a service to "interactWithDesktop「看到使用交互式服務上部分。

微軟(<sarcasm>in their infinite wisdom</sarcasm>)決定,這種能力會從窗口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/

+0

這與如何從.NET服務調用COM組件相關? – Jonnster

+0

我懷疑服務** IS **正在與COM進行通信,但您並未觀察到該交互,因爲COM(在服務空間中運行)不能與您的桌面(或其他用戶空間)交互,以便您能夠看到組件正在工作。 –

+0

爲什麼如果我調試com組件,當我用C#.NET編寫的windows窗體應用程序調用它時,它將在方法開始時在斷點處斷開,但是當它從Windows服務調用時它不會中斷?這就是爲什麼我不認爲它調用COM組件。 – Jonnster

0

你運行你的SERV LocalSystem帳戶中的冰點(Windows服務的默認值)?您的COM組件可能需要訪問可正常運行的帳戶中可用的資源...

嘗試編輯您的服務並在Log On tab上指定您的帳戶。