Вызов COM-компонента из .NET Windows Service - PullRequest
3 голосов
/ 20 июня 2011

У меня есть служба Windows, написанная на .NET C #, которая вызывает COM-компонент. У меня также есть тестовое приложение .NET Windows Forms, которое я использовал для тестирования компонента COM. Работает нормально из тестового приложения. Однако, когда я использую тот же код в службе Windows, ничего не происходит. Компоненты COM записывают все в файл, и тот факт, что файл журнала не получен, указывает на то, что компонент COM даже не вызывается.

Почему это работает из моего тестового приложения, но не из службы Windows?

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Служба обычно запускается изолированно от рабочего стола, и поэтому ваш вызов к компоненту COM изолирован от пользовательского интерфейса при вызове из службы. Вы можете разрешить службе "взаимодействовать с ", см. Раздел Использование интерактивной службы .

Microsoft (<sarcasm>in their infinite wisdom</sarcasm>) Решил, что эта возможность будет удалена из Windows Vista, и порекомендовал разделить ваше приложение на несколько частей и использовать другие механизмы для обеспечения связи между вашим пользовательским интерфейсом и вашим сервисом. Очевидно, некоторые (в том числе и я) не согласны, но это то, что есть ...

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 голосов
/ 25 июня 2011

Запускаете ли вы свою службу в учетной записи LocalSystem (по умолчанию для служб Windows)?Вашему COM-компоненту может потребоваться доступ к ресурсам, доступным в учетной записи, которая может нормально его запускать ...

Попробуйте отредактировать службу и указать свою учетную запись на вкладке Вход в систему .

...