c # проблема с иконками systray в windows-сервере - PullRequest
0 голосов
/ 13 июля 2010

Я работаю с Windows Server 2003 (и 2008) и C #, у меня проблема с системным рабочим столом. Я сделал приложение для управления диском, и когда оно запускается, оно скрывается от панели задач и добавляет значок в Систрей. Когда я нажимаю на этот значок (в системном окне), отображается форма приложения.

Я создал задачу в системном планировщике для автоматического выполнения приложения в определенное время. Если я вошел в систему на сервере, когда приложение запускается (из планировщика), значок появляется в системном окне рабочего стола. , Но если я не вошел на сервер и планировщик не запустил мое приложение, при входе в систему я не вижу значок в системном окне, но мое приложение работает отлично.

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

Полагаю, мне нужно уведомить мою форму заявки в проводнике (процессе), когда рабочий стол загружен, но я не знаю, как это сделать. Это Corrent путь? Я жду твоего совета.

С наилучшими пожеланиями

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Полагаю, это связано с тем, что, когда никто не вошел в систему, не будет рабочего стола для запуска приложения.

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

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

Одной из альтернатив будет размещение логики приложения в службе Windows. Затем я создал бы клиент, который запускается автоматически при входе пользователя в систему, проверяет, активна ли служба в данный момент, и отображает значок и форму.

1 голос
/ 13 июля 2010

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

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

Итак, вам нужен способ сообщить приложению, что у вас есть рабочий стол и система.Лоток готов к использованию значка, а затем приложение должно повторить процесс регистрации значка.Если вы не хотите отделять основную логику от уровня представления путем создания схемы обслуживания / клиента, вы можете вместо этого поместить свое приложение в группу «Автозагрузка», чтобы оно работало при входе в систему.

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

...