Служба Windows или лоток / NotifyIcon? - PullRequest
2 голосов
/ 21 ноября 2010

Я хочу написать приложение, которое с учетом сетевого ввода будет имитировать движения мыши, щелчки и ввод с клавиатуры. Как и почему я хочу это сделать, это другое обсуждение :-) Что бы я хотел услышать от SO, это какая модель будет предпочтительнее для такого приложения / сервиса?

  • Должен ли я сделать службу Windows, которая сидит на заднем плане, работает как система
  • или я должен сделать приложение в трее , которое сидит в трее и слушает манипулировать вводом пользователя?

Я еще не начал работать над этим, поэтому некоторые вещи, которые, как мне кажется, могли бы меня озадачить, были бы связаны с тем, что у службы нет интерактивного сеанса и / или разрешений.

Что-нибудь, что я должен предвидеть или иметь в виду?

Ответы [ 3 ]

8 голосов
/ 17 февраля 2011

Если вы намереваетесь запустить свой код в Vista и Windows 7, службы Windows будет недостаточно, поскольку они больше не могут взаимодействовать с рабочими столами пользователей.Если вы собираетесь манипулировать пользовательским вводом, вам понадобится программа, запущенная в сеансе пользователя.

Одна альтернатива - написать сервис для мониторинга сетевых событий, запустить клиент при входе пользователяи используйте IPC для связи между ними.

РЕДАКТИРОВАТЬ: NetworkService должно быть достаточно для привилегий обслуживания.

3 голосов
/ 17 февраля 2011

Как предложил Аарон, имейте службу Windows, контролирующую сеть.

Что касается IPC для процесса в пользовательском сеансе, вы можете использовать WCF, и именованный канал, вероятно, является наилучшим транспортным средством, но вам необходимо правильно его оформить, чтобы пересечь границу сеанса. Сделайте Сервис-процесс сервисом WCF с дуплексным контрактом: процесс сеанса пользователя вызывает сервис для регистрации, а затем события передаются обратно в процесс сеанса пользователя по контракту обратного вызова. См. Этот вопрос для объяснения проблем.

2 голосов
/ 24 февраля 2011

Аарон привел все аргументы, почему вы не можете обойтись без приложения в трее, но зачем добавлять услугу связи с приложением через IPC?

Служба полезна, когда вам нужно запустить код, даже если ни один пользователь не вошел в систему. Это не тот случай, верно?

Если вам не нужно манипулировать вводом нескольких пользователей, вошедших в систему одновременно, я бы использовал только приложение в трее, выполняющее обе задачи: мониторинг сетевых событий и манипулирование пользовательским вводом, для меня это намного проще.

...