В настоящее время я не могу найти соответствующие ссылки, но проблема в том, что служба Windows работает в другом сеансе, чем обычное пользовательское приложение.
В XP это было не совсем так. Вот все службы, запущенные в сеансе 0, и первый пользователь, который войдет в систему, также запустится в сеансе 0. Так что в этом случае приемы типа Разрешить службе взаимодействовать с рабочим столом работают. Но если вы быстро переключаетесь на другого пользователя, он получает сессию 1 и не имеет возможности напрямую взаимодействовать с сервисом. Это также верно, если вы подключаетесь через RDP к версии сервера (например, 2003 или 2008). Эти входы также начнутся в сеансе выше 0.
Наконец, что не менее важно, есть еще один недостаток, связанный с использованием рабочего стола:
Если вы включите эту опцию и ваша служба будет работать под учетной записью (по умолчанию) SYSTEM, она больше не сможет создавать сетевое соединение.
Правильный способ получить пользовательский графический интерфейс, который работает со службой, состоит в том, чтобы разделить их на два процесса и выполнить своего рода IPC (межпроцессное взаимодействие). Таким образом, служба запустится, когда машина включится, и приложение GUI будет запущено в пользовательском сеансе. В этом случае графический пользовательский интерфейс может создать снимок экрана, отправить его в службу, а служба может делать с ним все что угодно.