Отсутствует системный трей - PullRequest
1 голос
/ 29 мая 2009

Мы написали приложение командной строки C #, которое запускается в качестве первого шага в сценарии, который выполняется, когда пользователи запускают нашу систему CRM в Citrix (это опубликованное приложение). Цель командной строки - найти значок outlook на панели задач и скрыть его. Мы делаем это с помощью вызовов PInvoke для различных методов WIN32, и это прекрасно работает при тестировании в среде без Citrix.

Когда мы раскатываем это на наш тестовый сервер Citrix и запускаем через опубликованный скрипт приложения, наш код не находит окна для SysPager и (что более важно) окна ToolbarWindow32, которые мы ожидаем увидеть в системном трее. Кто-нибудь знает почему?

Пример кода:

IntPtr shellTrayHwnd = Win32.FindWindow("Shell_TrayWnd", null);
IntPtr sysPagerHwnd = Win32.FindWindowEx(shellTrayHwnd, IntPtr.Zero, "SysPager", null); //returns 0
IntPtr toolbarNotifyHwnd = Win32.FindWindowEx(shellTrayHwnd, IntPtr.Zero, "ToolbarWindow32", null);  //returns 0

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

К вашему сведению: конечная цель - скрыть значок outlook, который отправляется в системный трей клиента при запуске нашего программного обеспечения CRM, которое работает в фоновом режиме. Если мы не подавим значок, мы получим две иконки внешнего вида в трее конечного пользователя. Один из их локального обзора, а другой из внешнего вида, который работает на Citrix в фоновом режиме для работы программного обеспечения CRM (программное обеспечение CRM не использует outlook во встроенном режиме, потому что мы должны иметь возможность запускать плагины VSTO - которые не загрузить во встроенном режиме). Если кто-то знает более легкий путь, я весь в ушах.

Спасибо

Ответы [ 2 ]

1 голос
/ 08 июля 2009

Вы можете проверить свою первую строку. Вам нужно передать IntPtr.Zero вместо Null - обычно это лучший способ получить рабочий стол. Служба Shell Services также должна быть запущена (обычно под совершенно другим именем), и Explorer также должен быть запущен ... После этого я хотел бы посмотреть, будет ли запуск Spy ++ Enlighten.

0 голосов
/ 25 сентября 2009

В моей системе иерархия

Shell_TrayWnd -> TrayNotifyWnd -> SysPager -> ToolbarWindow32

...