Закрытие процесса из сервиса без уничтожения процессов

0

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

Почему я не могу убить процесс? Я не могу убить процесс использует значок в трее. Если я убью процесс, значок в трее не исчезнет.

То, что я пробовал до сих пор

Я уже пытался использовать глобальные дескрипторы событий (не работал, потому что дочерний процесс получил очень лаги).

Я также пытался использовать PostMessage/SendMessage для связи с процессом. Это решение не работает, потому что служба Windows не может взаимодействовать с любыми пользовательскими интерфейсами,...

Я нашел еще один вопрос (здесь, в stackoverflow), который точно описывает мою проблему: Закройте дочерний процесс из службы Windows. Этот вопрос не содержит хорошего решения.

Прежде всего, я не использую C++ вместо С#. Следующая проблема заключается в том, что дочерний процесс использует крючок для мыши. Таким образом, он работал очень быстро без многих накладных расходов. В противном случае это будет лагги, что означало бы, что мышь будет отставать от всей системы.

Итак, действительно ли нет простого решения закрыть процесс из службы Windows?

  • 0
    Процесс, который вы пытаетесь убить, вы контролируете его? (изменить код и перестроить)
  • 0
    Да. Я могу изменить это на все, что я хочу. @python
Показать ещё 1 комментарий
Теги:
service

1 ответ

0

Служба может использовать SetProcessWindowStation() и SetThreadDesktop() для присоединения к интерактивному рабочему столу целевого процесса до отправки сообщений в целевой процесс.

В качестве альтернативы служба может использовать CreateProcessAsUser() для запуска нового процесса в том же сеансе, что и целевой процесс, а затем этот процесс может отправлять сообщения в целевой процесс.

  • 0
    Я только что попробовал это. SetProcessWindowStation не работает. Я собираюсь попробовать SetThreadDesktop сейчас, но я боюсь, что это также не будет работать.
  • 0
    Что ж. Теперь я также попробовал SetThreadDesktop . Оба не сработали. Я просто не получаю доступ ни к каким пользовательским интерфейсам. Проблема в том, что, как уже упоминалось, «изоляция сеанса 0». Я должен начать процесс в другой сессии.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню