1 votes

Pas de gestion de la fenêtre ToolbarWindow32 dans la barre d'état système lors de l'exécution dans citrix (64bit)

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

1voto

Vous devriez peut-être vérifier votre première ligne. Vous devez passer IntPtr.Zero au lieu de Null -- c'est généralement la meilleure façon d'obtenir le Bureau. Le service Shell Services doit également être lancé (généralement sous un nom complètement différent) et Explorer doit également être lancé... Après cela, j'envisagerais de voir si l'exécution de Spy++ permet d'éclairer.

0voto

Sur mon système, la hiérarchie est la suivante

Shell_TrayWnd -> TrayNotifyWnd -> SysPager -> ToolbarWindow32

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X