Отследить событие входа в систему windows из c#?
можно еще прописать нужную программу как winlogon script в политиках, это будет действовать на всех пользователей, в т.ч. на новых
Выполнить->gpedit.msc -> Local Computer Policy -> User Configuration -> Windows Settings -> Scripts (Logon/Logoff)
если нужно что бы не было засветки на экране, надо делать не консольное приложение (и тем более не батник) а к примеру winform приложение, но без главного окна или стартующее с окном в состоянии "скрытое"
из приложения можете дергать сервис, а можно сразу делать то что планировали без всяких сервисов
ps - как вариант можно с каким то интервалом времени читать журнал безопасности и парсить события входа в систему
надо понимать что в любом случае скрыться от админа практически невозможно
к примеру тулза AutoRuns покажет "инородное тело" в системе при любом способе авто запуска - меню "автозапуск", реестр - любые ветки, сервис, драйвер, шедулер,  политика... хотя вот сейчас посмотрел и с ходу не увидел... проверил - забавно, как раз политику похоже AutoRuns и не показывает...
pps - ну не факт что для этого  надо изобретать целый сервис
тогда можно изначально запустить нужную программу как сервис
к примеру есть библиотека для запуска для запуска отлаженой консольной программы c# как сервиса - https://github.com/Topshelf/Topshelf
ppps - не совсем понятно зачем строить сервис - целевое приложение не может работать в бэкграунде? (его сразу можно было бы запускать как сервис, способов много, в т.ч. для готовых приложений.. в большинстве случаев по крайней мере...)
или приложение требует интерактива с пользователем?
можно просто создать батник в автозагрузке, для запуска всегда  от имени конкретного логина - runas к Вашим услугам
к примеру можно запустить экземпляр IE от имени другой учетки, и иметь в нем кеш и куки другой учетки.. вплоть до одновременного логина в социалку под разными именами... под одним из текущего профиля.. под другим из профиля IE запущенного от имени другой виндовой учетки
(я просто пытаюсь понять круг проблем, на основе опыта решения ситуаций, которые возможно похожи...
pppps - ... возможно надо уточнить - если приложение ВАШЕ (в исходниках) - ну в конце концов - сделайте само приложение сервисом и запускайте от имени системы (к примеру)... если оно интерактивное.. - да тоже самое - любой удобный способ автозапуска, но от имени нужной учетки... кстати, в том числе от имени системы тоже
Переделать всю архитектуру и сменить .NET на C++ для системного сервиса. Это в идеале.
А так, ищите по тексту "winlogon hook".. Это если делать серьезно, надежно и так далее.