Мы написали приложение командной строки 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 - которые не загрузить во встроенном режиме). Если кто-то знает более легкий путь, я весь в ушах.
Спасибо