#c# #service #interop #growl
#c# #Обслуживание #взаимодействие #рычание
Вопрос:
У меня есть служба, написанная на C #, которая отслеживает набор файлов. Он использует Growl для уведомления конечного пользователя, если время изменения одного из этих файлов превышает 4 часа. Я видел ситуации, когда Growl.exe не был запущен в сеансе текущего пользователя, таким образом, они не получали обновлений. Я бы хотел, чтобы моя служба проверила, запущен ли Growl (либо Growl.exe или, может быть, я мог бы где-нибудь поискать идентификатор приложения?) и запустить его, если это не так. Как я могу гарантировать, что Growl всегда выполняется в сеансе текущего пользователя на любой машине, на которой работает эта служба?
Комментарии:
1. Что такое «текущий пользователь»? С точки зрения службы, это пользователь, запускающий службу (т. Е. Локальную систему, LocalService и т.д.). Если вы имеете в виду текущего интерактивного пользователя, какого именно? Может быть несколько открытых интерактивных сеансов (например, если это сервер терминалов)…
2. Сессия 0 была бы разумным предположением. Я готов ограничить это пользователями на физической консоли. Я должен упомянуть, что в настоящее время это выполняется только на клиентских компьютерах Windows. Очень маловероятно, что он когда-либо будет запущен на сервере.
3. Помните, что настольные версии Windows также могут иметь несколько одновременных пользователей благодаря быстрому переключению пользователей.
4. Это очень хороший момент, Mystere. Я обязательно буду иметь это в виду в будущем.
Ответ №1:
Если службе нужно запускаться от имени текущего пользователя, то зачем делать ее службой? Цель службы — запускаться в любое время, даже когда пользователь не вошел в систему. Как таковой, он предназначен для запуска от имени определенного пользователя в любое время.
Почему бы не преобразовать это в программу, которая запускается при входе пользователя в систему?
Комментарии:
1. Это не та служба, которая должна запускаться от имени текущего пользователя. Это Growl (www.growlforwindows.com). Запуск приложения мониторинга как службы немного упрощает управление из серверной части. Я полагаю, что это также облегчит мне реализацию сердцебиения между различными машинами, на которых он выполняется в будущем, что я и хотел бы сделать.
2. Службы не должны взаимодействовать с рабочим столом. Это приводит к различным уязвимостям в системе безопасности, и в последних версиях Windows были предприняты шаги по их устранению. Эти шаги делают взаимодействие служб с рабочим столом очень раздражающим. Вы, конечно, можете проверить, запущено ли определенное приложение, и, возможно, даже обнаружить, запущено ли оно на текущем рабочем столе интерактивных пользователей .. но запуск приложения на этом рабочем столе был бы просто огромным недостатком безопасности. У вас должно быть запущено какое-нибудь приложение пользовательского режима, которое может уведомлять пользователя.
3. Я полагаю, вы правы. Запуск приложения в сеансе пользователя, вероятно, не является хорошим тоном. Вы упомянули о запущенном приложении, которое может уведомлять пользователя. Я уже делаю это с помощью Growl. Чего я пытаюсь избежать, так это ситуации, когда либо сбой Growl, либо пользователь завершает его. Моя идея состояла в том, чтобы перезапустить службу Growl в случае сбоя или завершения работы.
4. Ну, у вас мог бы быть небольшой сторожевой процесс, который запускается при входе пользователя в систему, он автоматически запускал бы growl и отслеживал его. Имейте в виду, такое поведение очень похоже на вредоносное ПО, и некоторым пользователям это может не понравиться.
5. Пока это не отключает антивирусное программное обеспечение, меня это устраивает. Это приложение для мониторинга имеет решающее значение для непрерывности бизнеса. Я изучу это. Спасибо.
Ответ №2:
Это интересный вопрос, но, похоже, вы не можете сделать это так, как предлагает этот пост. Похоже, вы можете либо указать, что служба выполняется как локальная системная служба, либо как конкретный пользователь:
Ответ №3:
Если ваша служба запускается как «автоматическая», то вы можете предварительно настроить только один набор учетных данных для службы. Однако, если вы можете определить исполняемый файл, который служба вызывает при запуске, вы можете создать командный файл, который запустит эту службу при входе в систему, после чего по умолчанию будут использоваться учетные данные активных пользователей.
Приветствия,
CEC