Задать вопрос
lari4
@lari4
ECM Solutions Specialist

Использование COM объектов в Windows Service C#?

С помощью OleWoo из tlb-файла получаю uuid COM-объекта и DispID его свойств и методов. Создал обертку (dll-библиотека).
public class Broker : IDisposable
	{
        #region Переменные класса
        /// <summary>
        /// Тип приложения 
        /// </summary>
        private Type _sapBrokerType;
        /// <summary>
        /// Объект приложения
        /// </summary>
        private object _sapBrokerObj;
        /// <summary>
        /// Освобождены ли используеммые ресурсы
        /// </summary>
        private bool _disposed = false;


public Broker()
        {
            _sapBrokerType = Type.GetTypeFromCLSID(new Guid("{b9df38f7-5340-4512-bae6-4ef7465a3c17}"));
            _sapBrokerObj = _sapBrokerType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
        }

Подключаю эту DLL как reference к проекту типа Windows Form App, все работает. COM-объект создается, все методы отрабатывают.
var broker = new Broker();

Запихиваю этот же код в проект типа Windows Service, падает на создание COM-объекта:

COMException was caught

Не удалось получить фабрику класса COM для компонента с CLSID {B9DF38F7-5340-4512-BAE6-4EF7465A3C17} из-за следующей ошибки: 80080005 Ошибка при выполнении приложения-сервера (Исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).

Что не так?
  • Вопрос задан
  • 5158 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@Sumor
Скорее всего у пользователя, под которым запущен сервис нет прав на создание объекта.
Если это DCOM, то права можно задать в аплете «Службы компонентов», раздела «Администрирование» Панели инструментов.
Может так случиться, что создаваемый com-объект требует наличия GUI. Например, использует очередь сообщений, выдаёт диалоги. В этом случае служба, запущенная не от системного пользователя с установленной галочкой «Разрешить взаимодействие с рабочим столом», вероятнее всего не будет работать так как работает обычное приложение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы