COM-компонент работает на 100% из консольного приложения, но дает сбой при вызове из службы - PullRequest
2 голосов
/ 11 декабря 2010

Мне нужен ваш совет для следующего кода C #:

EgarDDSEnt.IIVDDSEnt dds = null; // This line executes fine.
dds = new IVDDSEnt();  // This line fails with an exception ...
dds.Connect("username", "password"); // ... which makes this line fail too.

Вот признаки:

Windows Server 2008 R1:

  • Код не выполняется, когдавыполняется из приложения-службы Windows.
  • Код работает на 100% при выполнении из консольного приложения.

Windows 7:

  • Код работает на 100% привыполняется из приложения-службы Windows.
  • Код работает на 100% при выполнении из приложения консоли.

Класс IVDDSEnt () - это COM-объект, который устанавливается при установке «ivolatility»SDK ".

Обновление:

  • Когда я выполняю" System.IO.Directory.GetCurrentDirectory () "из консольного приложения, он возвращает" D:\ MyDevDirectory \ "
  • Когда я выполняю" System.IO.Directory.GetCurrentDirectory () "из приложения-службы, он возвращает" C: \ windows \ system32 \ ".
  • Приложениена самом деле один и тот же двоичный файл как для службы, так и для консоли (это гибридное приложение, которое может работать в режиме консоли или востановитесь как служба, если вы передадите ей «-service» в командной строке).

Обновление:

Добавлены try / catch и "e.GetBaseException "(определяется как" Возвращает исключение, являющееся основной причиной одного или нескольких последующих исключений "):

System.Runtime.InteropServices.COMException (0x80080005): Retrieving
the COM class factory for component with CLSID
{FA944FE7-AEB8-4B5B-8315-11D19B1F6264} failed due to the following error:
80080005 Server execution failed (Exception from HRESULT:
0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at PhiDataOnSchedule.ConsoleApplication.MyMain(Boolean dummyRun)

Обновление:

Все еще можноне решить проблему - самый простой способ - это просто обновить Windows Server 2008 R1 до Windows Server 2008 R2 (если он работает на Win7, а Windows Server 2008 R2 имеет ядро ​​Win7, возможно, он обойдет основную проблему).как-то?).

Ответы [ 3 ]

4 голосов
/ 11 декабря 2010

Это, вероятно, проблема с правами.Проверьте, под какой учетной записью работает служба и какие у нее права.Затем либо измените учетную запись службы, либо расширите ее права.

1 голос
/ 12 декабря 2010

CO_E_SERVER_EXEC_FAILURE - это «Выполнение сервера не удалось».

Это будет означать, что компонент должен быть вне процесса, но среда выполнения COM не может запустить исполняемый файл (или, возможно, загрузить dll в хостprocess).

Поиск действий с файлом, содержащим компонент с Process Monitor , может дать вам подсказку (это могут быть разрешения: Process Monitor может подтвердить это).

0 голосов
/ 29 декабря 2010

Возможно, мне нужно указать учетную запись для запуска службы под?

Полный пример того, как ее кодировать, см .:

http://www.codeproject.com/KB/WPF/LtoE.aspx?artkw=LINQ%20to%20WCF#ShowIt

Найдите текст: «После запуска установщика он позволит вам ввести учетные данные для входа в службу, используя следующее диалоговое окно»:

alt text

...