Nous avons écrit une application en ligne de commande C# qui est exécutée en tant que première étape d'un script qui est exécuté lorsque les utilisateurs lancent notre système CRM sur Citrix (il s'agit d'une application publiée). L'objectif de la ligne de commande est de trouver l'icône Outlook dans la barre d'état système et de la cacher. Nous faisons cela via des appels PInvoke à diverses méthodes WIN32 et cela fonctionne très bien lorsque nous testons dans un environnement non citrix.
Lorsque nous déployons cette application sur notre serveur de test Citrix et que nous l'exécutons via l'application publiée script, notre code ne trouve pas de Windows pour le SysPager et (plus important) ToolbarWindow32 Windows que nous nous attendons à voir dans la barre d'état système. Quelqu'un sait-il pourquoi ?
Exemple de code :
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
Comme je l'ai dit, ce code fonctionne très bien lorsqu'il est exécuté dans une session non citrix, mais dès que nous exécutons dans citrix, nous semblons perdre la possibilité d'obtenir ces poignées.
FYI : Le but ultime est de cacher l'icône outlook qui est envoyée dans la barre des tâches du client lorsque notre logiciel CRM, qui repose sur outlook fonctionnant en arrière-plan, est exécuté. Si nous ne supprimons pas l'icône, nous obtenons deux icônes Outlook dans la barre d'état système de l'utilisateur final. Une de leur outlook local et une de l'outlook qui tourne sur citrix en arrière-plan pour que le logiciel CRM fonctionne (le logiciel CRM n'utilise pas outlook en mode intégré parce que nous avons besoin de pouvoir exécuter des plugins VSTO - qui ne sont pas chargés en mode intégré). Si quelqu'un connaît un moyen plus simple, je suis tout ouïe.
Gracias