Я давно занимаюсь разработкой 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; Я не могу отладить нативный код.