Если Ваш код выгоды не будет ни один
, можно проигнорировать исключение, но по крайней мере упомянуть ожидаемое исключение в документах метода, таким образом, потребитель может ожидать и обработать если необходимый
Я не думаю, что это возможно.
Нам пришлось изменить наш сценарий, в котором наше приложение запускалось не из службы, а было стандартной программой Windows, имеющей NotifyIcon в угол.
Если кто-то все же найдет реальный ответ, дайте мне знать.
Пробовали ли вы запускаться как локальная система с установленным флажком «Разрешить службе взаимодействовать с рабочим столом»?
Сейчас я не могу найти соответствующие ссылки, но проблема в том, что служба windows работает в другом сеансе, чем обычное пользовательское приложение.
В XP это было не совсем верно. Здесь все службы запускаются в сеансе 0, и первый пользователь, который входит в систему, также запускается в сеансе 0. Так что в этом случае трюки вроде Allow service to interact with desktop работают. Но если вы быстро переключитесь на другого пользователя, он получит сессию 1 и не будет иметь возможности взаимодействовать со службой напрямую. Это также верно, если вы подключаетесь через RDP к серверной версии (например, 2003 или 2008). Эти логины также будут начинаться в сессии выше 0.
И наконец, есть еще один недостаток использования взаимодействия с рабочим столом:
Если вы включите эту опцию и ваша служба будет работать под учетной записью SYSTEM (по умолчанию), она больше не сможет создать сетевое соединение.
Правильный способ получить пользовательский GUI, работающий со службой - разделить их на два процесса и сделать что-то вроде IPC (inter process communication). Таким образом, служба будет запускаться при запуске машины, а GUI-приложение будет запускаться в пользовательской сессии. В этом случае GUI может создать снимок экрана, отправить его в службу, а служба может делать с ним все, что угодно.
Он работает с использованием локальной системы с «Разрешить службе взаимодействовать с рабочим столом»
Вы можете настроить это программно, используя этот пример кода:
http://www.vbforums.com /showthread.php?t=367177 (это vb.net, но очень просто)