Большинство Операционных систем сообщает пользователю или обработке вызовов, если приложение было успешно или нет. Это особенно полезно в сценариях, где сценарий может условно перейти (если тогда) на результатах программы. Что-то вроде:
// pseudo-code
screenscrape http://mydatasource.com > results.txt
if errorlevel == 0 then
processfile results.txt
else
echo Screen Scraping Failed!
end if
Это состояние результата сделано через возвращаемое значение основного.
, В то время как некоторые компиляторы допускают пусто основной ради непротиворечивости и простоты, стандарт ANSI требует одного единственного прототипа основного:
int main(int argc, char *argv[]);
, поскольку в C, аргументы очищены вызывающей стороной, автор основного может забыть объявлять или обрабатывать аргументы argc & argv. Однако, если стандартные программы установки, которые называют основными, ожидают международное возвращаемое значение, и вместо этого не находят один, поведение может неопределенный.
Короткий ответ:
Этот механизм будет работать для захвата необработанных исключений в любой среде, включая службы Windows. Однако существуют некоторые ограничения на то, какие исключения могут быть обработаны таким образом. Например, StackOverFlowException может быть необработанным, но, учитывая его характер, вы никогда не увидите, что оно проходит через обработчик UnhandledException.
Как вы думаете, почему это не работает? Вы пробовали подключиться к процессу с помощью отладчика, включить исключения первого шанса и посмотреть, что происходит?
Почему у вас есть необработанное исключение в службе? Что является исключением? Некоторые исключения имеют "особое поведение" ( и еще одна ссылка здесь для .NET 4 изменений в исключениях поврежденного состояния ).
Кроме того, что вы пытаетесь сделать в обработчике? Возможно, действия, которые вы пытаетесь выполнить в обработчике, ограничены при работе в качестве службы.