Приложение иконки в трее будет закрыто от сервиса

Так что название само собой разумеется.

У меня есть этот сервис, написанный на C ++, который создает иконку в трее с CreateProcessAsUser, и все, кажется, работает нормально.

Проблема возникает при остановке службы, что я также хочу остановить приложение иконки в трее, но это должно быть сделано осторожно, так как это приложение может получить некоторые данные, которые должны быть сохранены в файл перед выходом.

Если это полезно, можно использовать API wxWidgets, но теперь все процессы создаются с помощью API Windows, даже сама иконка в трее создается с учетом wxWiidgets, а также со службой.

Любой совет приветствуется!

0

Решение

Приложение в трее нуждается в способе получения сигнала, когда оно должно выходить изящно.

Если приложение в трее уже имеет окно, вы можете отправить его WM_CLOSE или же WM_QUIT сообщение. Однако оконные сообщения не могут быть отправлены через границы сеанса. Но если вы можете изменить приложение в трее, вы можете заставить его принимать необязательный параметр командной строки, который просто отправляет сообщение в предыдущий экземпляр приложения и затем завершает работу. И тогда служба может при необходимости запустить новый экземпляр приложения с этим параметром. Или, если вы не можете изменить приложение, просто запустите второй экземпляр вашего собственного EXE-файла службы или другое вспомогательное приложение, которое вы пишете.

В противном случае, если в приложении на панели задач еще нет окна, но вы можете изменить приложение, добавьте скрытое окно. Или лучше добавить другой механизм IPC, например, именованное событие ядра через CreateEvent() что приложение может ожидать, или канал, или сокет и т. д. То, что служба может затем отправить сигнал напрямую.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]