Служба c останавливается с ошибкой «это приложение запросило среду выполнения завершить его необычным способом»

#c #service #windows-xp

#c #Обслуживание #windows-xp

Вопрос:

У меня есть c NTservice, к которому модули SAP обращаются через вызовы rfc. Теперь эта служба останавливается с сообщением о том, что «это приложение запросило среду выполнения завершить его необычным способом», а затем показывает некоторую ошибку IE script, которая указывает на URL «res://C:WINDOWSSystem32mmcndmgr.dll/views.htm » — Я получаю эту ошибку очень редко и неожиданно.

Я понятия не имею, почему возникает эта ошибка, пожалуйста, кто-нибудь может рассказать мне о деталях и о том, как ее исправить, если это возможно

(Windows xp, служба создана в MSVC 2005)

Спасибо, Анил

Ответ №1:

Это сообщение об ошибке (по крайней мере, обычно) означает, что у вас возникло неперехваченное исключение. Вы могли бы начать с добавления try / catch(std::exception const amp;e) / catch(...) в свой ServiceMain в попытке перехватить исключение и, если оно является производным от std::exception , распечатать его what() , чтобы посмотреть, что оно может сказать само по себе…

Комментарии:

1. Или ошибка сегментации. Или FPE. Или любое количество вещей!

2. Хотя это могут быть и другие причины, это достаточно частое неперехваченное исключение, которое обычно является тем, что вы хотите попробовать в первую очередь. Когда / если это не удается, 1) код обработки исключений по-прежнему полезен, и 2) вам придется заняться более сложными вещами…

3. Ваша практическая логика верна. Тем не менее, я хотел бы посмотреть статистику. 🙂

Ответ №2:

Это очень бесполезное сообщение, которое отображается при сбое вашего исполняемого файла. Почти все может быть неправильно.

Запустите исполняемый файл через отладчик и дождитесь возникновения проблемы. Затем вы можете попытаться узнать больше информации об этом.

В частности, я бы проверил документацию службы и убедился, что ваши модули SAP правильно используют вызовы RFC.

Комментарии:

1. Этого должно быть достаточно для регистрации отладчика post mortem (windbg / I). Запуск службы в отладчике может быть довольно сложной задачей.

2. @mkaes: Вам не обязательно запускать его как службу. Тем не менее, хорошая идея.