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 ответ
Теперь я нашел решение.
Я нашел это на другом форуме, где у кого-то возникла проблема с запуском другого приложения через Интернет. Как ни странно, это решение сработало и для меня.
- Нажмите запустить
- введите dcomcnfg
- Найдите путь к компонентным службам> Компьютеры> Мой компьютер>DComConfig>
- Тогда найдите ваше приложение, в моем случае "CATIA Application".
- щелкните правой кнопкой мыши> свойства
- Перейти на вкладку "Идентичность"
- Измените пользователя, который должен запустить это приложение, с "Запускающий пользователь" на "Интерактивный пользователь".
Теперь это работает для меня. Я все еще не могу поймать процесс (GetActiveObject), если я сначала запустил его вручную. Но, по крайней мере, Сервису удается запустить новый экземпляр без каких-либо ошибок.
Я думаю, что это может быть полезно для многих людей, которые сталкиваются с этим сообщением об ошибке при попытке запустить приложение из службы Windows.