У меня есть общий код, который мне нужно использовать как в WinForm, так и в сервисе. Как я могу проверить, выполняется ли мой код в службе, чтобы избежать проблем с модальными диалоговыми окнами.
Возможно, вам будет достаточно протестировать свойство Environment.UserInteractive и показать диалоговое окно, только если это правда.
System.Environment.UserName равно SYSTEM или Network, тогда, скорее всего, это услуга.
System.Environment.UserName
SYSTEM
Network
Проверьте стек вызовов и посмотрите, относится ли самый первый вызванный метод к классу, производному от ServiceBase
ServiceBase
Вы также можете установить Process.SessionId как 0 , поскольку все системные процессы и службы работают в сеансе 0.
Process.SessionId