У меня есть windows служба, написанная на c#. Эта служба размещена на Windows Server 2016.
Эта служба выполняет некоторые вычисления для каждых равных интервалов времени. Чтобы выполнить этот расчет, он открывает Приложение в фоновом режиме называется AutoCal, которое является компонентом COM.
Приложение установлено на сервере, и его dll добавляется в качестве ссылки в службу.
Сначала машина имела версию V4.1. Я написал следующий код, чтобы открыть приложение.
(AutoCal.Application)Interaction.CreateObject("AutoCal.Application.NewInstance")
Раньше оно открывалось в фоновом режиме и работало отлично, как и ожидалось. Теперь версия приложения обновлена до V4.2 и удалена старая версия.
Когда я запускаю ту же службу, она выдает исключение:
Невозможно создать компонент ActiveX.
После поиска я изменил приведенный выше код этой строки показывает, работает ли он:
(AutoCal.Application)Activator.CreateInstance(Type.GetTypeFromProgID("AutoCal.Application.NewInstance"))
Но это приводит к совершенно другой ошибке, как показано ниже.
Получение фабрики классов COM для компонента с CLSID {xxxxxx-xxxxx-xxxxxx-xxxxxxx} не выполнен из-за следующей ошибки: 80080005 Ошибка выполнения сервера (исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)) *
Я искал эту ошибку и подтвердил, что новый v4.2 зарегистрирован или нет. Я заметил, что только V4.1 я зарегистрирован в реестре по адресу:
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ CompanyName \ AutoCal \ V4.1.
Итак, я зарегистрировал V4.2, используя: cd windows\SysWOW64 --> regsvr32 "Path of .ocx file"
Даже тогда он выдавал ошибку.
Кроме того, я попытался создать код службы окна X86
вместо AnyCPU
и развернуть его на сервере, поскольку приложение AutoCal также является 32-разрядным приложением. Но это тоже не сработало.
Есть ли что-то еще, чего мне не хватает, чтобы это сработало. Любая помощь в этом отношении очень полезна. Спасибо.
PS: Сервер - это 64-битный компьютер, AutoCal - 32-битное приложение, если эта информация полезна.