С помощью
TestArea("name_of_test");
вы создаете временный объект, и этот временный объект будет уничтожен немедленно .
Итак, когда выражение, в котором оно использовалось, закончилось, объект больше не существует.
Rasmus, это - более ранний вопрос .
Из ответов кажется, что самый популярный путь состоит в том, чтобы использовать простой параметр командной строки или попытаться получить доступ к Консольному объекту в блоке выгоды попытки (в Сервисе, Консоль не присоединена к процессу, и пытающийся получить доступ к этому выдает исключение).
Или если Вы испытываете затруднения при тестировании/отладке сервиса, переместите код в отдельный dll блок и создайте seprate тестовую обвязку (winforms/console и т.д.).
(Просто заметил, что Jonathan добавил свое решение в конец вопроса.)
Я не попробовал его, но это возможно тот Процесс. GetCurrentProcess поможет - под консольным режимом, имя процесса совпало бы с исполняемым файлом, тогда как я буду ожидать (и снова, проверьте!), что при выполнении как услуга его отличалось бы.
Не знаю, сработает ли это, но вы можете попробовать использовать PInvoke с этим кодом и проверить, является ли родительский файл «services.exe».