С помощью 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)).
Что не так?