Как отладить неуправляемый код в .NET Windows Service? - PullRequest
1 голос
/ 29 декабря 2010

Я давно занимаюсь разработкой Windows-сервиса VB.Net. Он использует класс COM, разработанный на C ++.

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

Некоторое время назад я использовал для отладки служб Windows c ++ вызовом DebugBreak () в начале приложения. Для .NET я нашел это: Как отладить службу Windows, используя точки останова?

Пока все хорошо; но есть вызов метода для COM-объекта, который завершается ошибкой с кодом ошибки 0x80004003 при работе в сервисном режиме, но он работает правильно как приложение.

Проблема в том, что я не могу отладить код COM. Если я загружаю из него cpp в сеансе vs и ставлю точку останова, она игнорируется, потому что нет загруженных символов даже после создания COM-объекта. Если я помещаю DebugBreak в код C ++, он вызывает исключение в .Net, но не просит меня отлаживать код. В сервисном проекте установлен флажок «Включить отладку неуправляемого кода».

Я также пытался использовать проект класса COM, но безуспешно.

Есть идеи?

Edit - 2011-01-03: Чтобы ответить на вопросы Криса О, да, я могу запустить процесс как SYSTEM, но как это мне поможет? Если все работает как СИСТЕМА, то это потому, что мне нужны разрешения?

И да, я могу присоединить отладчик к процессу с ограничениями, указанными выше: в диалоговом окне «присоединение к процессу» из Visual Studio 2005 служба не отображается в списке процессов, поэтому у меня есть использовать вызов Debug.Assert или аналогичные методы. Кроме того, я могу только отладить код .Net; Я не могу отладить нативный код.

...