C# Windows Service COM исключение 80080005 при запуске приложения

Я создал службу Windows, которая пытается запустить приложение (в данном случае CATIA).

Я использую следующий код:

private Application GetApplicationObject(string ProgId)
        {
            Application AppObject = null;
            //Try to get allready open instance of the Application
            try
            {
                AppObject = (Application)Marshal.GetActiveObject(ProgId);
            }
            catch
            {
                //Create a new instance of the Application instead
                AppObject = (Application)Activator.CreateInstance(Type.GetTypeFromProgID(ProgId));                
            }
            return AppObject;
        } 

Я получаю следующую ошибку, когда моя служба пытается запустить приложение:

System.Runtime.InteropServices.COMException (0x80080005): получение фабрики классов COM для компонента с CLSID {87FD6F40-E252-11D5-8040-0010B5FA1031} не удалось из-за следующей ошибки: 80080005. at System.RuntimeTypeHandle.CreateTypeance Логическое publicOnly, булева NOCHECK, булева & canBeCached, RuntimeMethodHandle& т е р, булева & bNeedSecurityCheck) в System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, булева fillCache) при System.RuntimeType.CreateInstanceImpl(булево publicOnly, булевы skipVisibilityChecks, булева fillCache) при System.Activator.CreateInstance(Тип type, логическое непубличное значение) в CATIA.CATIA.GetApplicationObject(String ProgId)

Важно: когда я запускаю этот код как приложение Windows вместо службы Windows, все работает нормально. Я также попытался сначала запустить CATIA и запустить его в фоновом режиме, но мой Сервис не смог его перехватить.

Я запускаю Службу с локальной системой, и я установил флажок "Взаимодействовать с рабочим столом".

Мой ProgId - CATIA.Application, и, как я уже сказал, он работает, когда я запускаю его как приложение, а не как службу.

Любая идея о том, что вызывает это?

1 ответ

Решение

Теперь я нашел решение.

Я нашел это на другом форуме, где у кого-то возникла проблема с запуском другого приложения через Интернет. Как ни странно, это решение сработало и для меня.

  1. Нажмите запустить
  2. введите dcomcnfg
  3. Найдите путь к компонентным службам> Компьютеры> Мой компьютер>DComConfig>
  4. Тогда найдите ваше приложение, в моем случае "CATIA Application".
  5. щелкните правой кнопкой мыши> свойства
  6. Перейти на вкладку "Идентичность"
  7. Измените пользователя, который должен запустить это приложение, с "Запускающий пользователь" на "Интерактивный пользователь".

Теперь это работает для меня. Я все еще не могу поймать процесс (GetActiveObject), если я сначала запустил его вручную. Но, по крайней мере, Сервису удается запустить новый экземпляр без каких-либо ошибок.

Я думаю, что это может быть полезно для многих людей, которые сталкиваются с этим сообщением об ошибке при попытке запустить приложение из службы Windows.

Другие вопросы по тегам