En C#, VBS ou autre : retrouver une appli qui tourne avec Citrix

En C#, VBS ou autre : retrouver une appli qui tourne avec Citrix - Divers - Programmation

Marsh Posté le 27-12-2005 à 17:30:41    

Salut,
 
Au boulot, afin de donner l'accès à un ERP aux clients "éloignés" (hors du réseau local) on utilise un serveur Citrix qui fait tourner le client de l'ERP.
 
Citrix, c'est une version améliorée de Terminal Serveur (ce sont les gars qui ont développé TS pour M$ qui ont rompu leur contrat avec Microsoft, et on fait évoluer TS pour en faire Citrix de ce que j'ai compris).
 
Le seul souci, c'est que j'ai produit des éditions qui génèrent un fichier Excel.
Hors, Excel n'est pas installé sur Citrix. Idem pour celles qui font un PDF (enfin là c'est un autre problème mais on le laisse de coté pour le moment).
 
Le but du jeu sera alors de générer un fichier HTML, XML ou autre, et le charger dans IE.
 
Via code, on peut normalement aisément intercepter IE qui tourne en local afin de récupérer le contenu de la page par exemple.
 
J'aimerais donc écrire un petit programme résident, qui check régulièrement si un document est chargé dans une fenêtre IE ou autre sur Citrix, en récupérer le contenu, créer un document temporaire, puis lancer le document dans l'application qui va bien en local.
 
Seulement, je ne sais pas du tout comment accéder à Citrix depuis un programme...


Message édité par Arjuna le 28-12-2005 à 11:08:57
Reply

Marsh Posté le 27-12-2005 à 17:30:41   

Reply

Marsh Posté le 27-12-2005 à 17:34:16    

Avec ça, je dois pouvoir sans problème retrouver mes petits parmi les processes :
 
http://msdn.microsoft.com/library/ [...] cesses.asp
 
Mais ensuite, comment aller jouer dedans et retrouver les méthodes... ?

Reply

Marsh Posté le 27-12-2005 à 17:50:56    

J'arrive à butter Notepad, ou récupérer le titre de la fenêtre, ou même l'adresse mémoire où il se trouve, mais aucune idée de quoi en faire après...
 

Code :
  1. private void Form1_Load(object sender, System.EventArgs e)
  2.  {
  3.   System.Diagnostics.Process[] myProcesses;
  4.   myProcesses = System.Diagnostics.Process.GetProcesses();
  5.   foreach (System.Diagnostics.Process instance in myProcesses)
  6.   {
  7. //    instance.WaitForExit(3000);
  8.     if (instance.MainWindowTitle.IndexOf("- Bloc-notes - \\\\Distant, SSL/TLS 128 bits." ) > 0)
  9.    {
  10.     instance.CloseMainWindow();
  11.     /*
  12.     MessageBox.Show(instance.MainWindowTitle);
  13. //     System.Diagnostics.ProcessModuleCollection myModules;
  14. //     myModules = instance.Modules;
  15.     MessageBox.Show(instance.MainModule.ModuleName);
  16.     MessageBox.Show(instance.MainModule.FileName);
  17. //     foreach(System.Diagnostics.ProcessModule module in myModules)
  18. //     {
  19. //      MessageBox.Show(module.ModuleName);
  20. //     }
  21.     System.IntPtr ptr = instance.MainModule.BaseAddress;
  22.     MessageBox.Show(ptr.ToString());
  23. */
  24.    }
  25.   }
  26.  }

Reply

Marsh Posté le 27-12-2005 à 17:54:35    

api Win32 à coups de GetProcAddress et de GetModuleHandle, non ?

Reply

Marsh Posté le 27-12-2005 à 18:46:03    

Ben les Handles et les Adresses, je les ai déjà.
Le souci, c'est qu'après, je sais pas quoi en faire :D

Reply

Marsh Posté le 27-12-2005 à 18:48:04    

En fait, même si j'ai toujours développé sur technos proprio Microsoft (VB, VBS, ASP, C#, SQL Server, etc.) je n'ai jamais vraiment développé de "spécifique windows", c'est à dire que je me suis toujours contenté des librairies qu'on me proposait, sans aller bidouiller à la main dans la mémoire ou les processes.
 
Du coup, là je suis un peu comme une poule qui a trouvé un couteau : chuis super content d'avoir trouvé mon process, mais j'ai aucune idée de quoi en faire...

Reply

Marsh Posté le 27-12-2005 à 18:52:38    

[:ddr555]
 
ce sont les fonctions de Citrix ou de IE que tu cherches ?

Reply

Marsh Posté le 27-12-2005 à 20:19:40    

caÿ un peu crade ce que tu cherches a faire [:chrisbk]

Reply

Marsh Posté le 28-12-2005 à 01:10:16    

ben je cherche à accéder à l'application à travers citrix. le copier/coller fonctionnant, il doit y avoir moyen d'interagir avec l'appli depuis le bureau [:spamafote]

Reply

Marsh Posté le 28-12-2005 à 01:11:23    

et je sais, c'est crade, mais ces idiots de développeurs de citrix n'ont pas pensé à faire un support pour les lecteurs partagés ni transfert de fichier...  du coup on fait avec les moyens du bord. ou alors j'ai pas trouvé comment ça marchait, en tout cas j'en ai pas


Message édité par Arjuna le 28-12-2005 à 11:10:08
Reply

Marsh Posté le 28-12-2005 à 01:11:23   

Reply

Marsh Posté le 28-12-2005 à 10:16:39    

Hmmm...
 
A votre avis, une méthode comme ça, ça attends quoi ?
 

Code :
  1. Function AttachSession(ByVal pSessionId As String) As Long
  2. method AttachSession


 
Ce pSessionId c'est quoi ?
 
Vu que je sais pas comment taper dans mon application via les process (et en effet, si j'ai bien sous les yeux mon application, il n'y a aucune chance pour que ce soit vraiment elle que j'ai sous les yeux), je vais passer par Citrix directement.
Seulement voilà...
 
=> J'ai trouvé un objet COM sur mon disque, qui correspond au client.
=> Maintenant que mon projet sais comment jouer avec Citrix, j'aimerais bien qu'il me récupère la session active...
 
Notamment parceque j'ai trouvé ça comme méthode dans la class, et ça me plait bien :  
 

Code :
  1. Sub LoadIcaFile(ByVal File As String)
  2. method Load ICA file


 
Avec beaucoup d'espoir, ça permet de charger un fichier depuis le serveur (l'espoir fait vivre)

Reply

Marsh Posté le 28-12-2005 à 10:21:00    

Arjuna a écrit :


Notamment parceque j'ai trouvé ça comme méthode dans la class, et ça me plait bien :  
 

Code :
  1. Sub LoadIcaFile(ByVal File As String)
  2. method Load ICA file


 
Avec beaucoup d'espoir, ça permet de charger un fichier depuis le serveur (l'espoir fait vivre)


ahem.
 
 
Le fichier ica, c'est juste les infos de connexion a une application (ou bureau, bref, a citrix).  [:klem3i1]

Reply

Marsh Posté le 28-12-2005 à 10:21:42    

J'ai trouvé un forum de support sur le site de citrix, vais leur poser mes questions, on verra bien :)

Reply

Marsh Posté le 28-12-2005 à 10:46:35    

http://support.citrix.com/forums/t [...] adID=71521
 
Qui vivra verra [:spamafote]


Message édité par Arjuna le 28-12-2005 à 10:46:42
Reply

Marsh Posté le 28-12-2005 à 10:46:57    

lorill a écrit :

ahem.
 
 
Le fichier ica, c'est juste les infos de connexion a une application (ou bureau, bref, a citrix).  [:klem3i1]


Rha c'est mal :o

Reply

Marsh Posté le 28-12-2005 à 11:03:23    

lorill a écrit :

ahem.
 
 
Le fichier ica, c'est juste les infos de connexion a une application (ou bureau, bref, a citrix).  [:klem3i1]


Sinon, t'as l'air de connaitre :)
 
Tu sais pas comment on peut transférer un fichier à partir de Citrix ?
 
L'architecture :
 
euh... attends, je dois avoir un dessin quelquepart...
 
http://magicbuzz.multimania.com/files/network.png
 
Alors... C'est pas très clair.
 
Bon, Citrix, il tourne sur le serveur nommé "METAFRAME" sur le dessin. C'est à dire que pour se connecter aux serveur de droite, il doit passer à travers un firewall.
Sur les serveurs en question se trouve l'appli Server du système d'information. Sur Citrix, on a un client pour ce système.
 
Les personnes qui utilisent Citrix viennent d'internet (même si elles sont depuis l'intérieur du réseau, y'a un modem pour les connections sortantes et un pour les entrantes).
 
Le but du jeu, c'est donc, une fois le client connecté via Citrix, lui permettre d'aller chercher un fichier jusque sur le serveur du SI, et ce, de façon automatisée.
 
C'est à dire que si mon appli détecte l'ouverture d'une fenêtre "trucmuche.pdf - Acrobat Reader", alors je shoot la fenêtre, et je télécharge le fichier trucmuche.pdf et je l'affiche en local.
Pour les fichiers Excel, le mieu, c'est de générer deux fichier : le fichier Excel, et un TXT (ouvrable donc par notepad sur le serveur Citrix) contenant les infos mime et chemin du fichier Excel, et donc intercepter les fichiers TXT formatés tels quels.
 
Voilà le truc... Puisque Citrix semble pas foutu de le faire tout seul :/


Message édité par Arjuna le 28-12-2005 à 11:13:06
Reply

Marsh Posté le 28-12-2005 à 11:06:24    

A noter que le client sait faire ça tout seul normalement : si je lance une édition et que je demande à voir le résultat, il télécharge automatiquement le fichier (transfert interne à l'application, donc ne nécessite ni port particulier ni protocole ni partage de disque), puis recherche dans le BDR si le type est connu, et lance alors l'application concernée et lui envoie le fichier.
Si l'application n'est pas connue (notre cas ici avec Excel), alors ça fait un message d'erreur.
 
Dans notre cas, on a donc des magasins qui ont Excel sur leur poste, mais qui ne peuvent pas ouvrir une édition Excel car il n'est pas installé sur le serveur Citrix, et ils peuvent ouvrir des PDF mais pas les imprimer car ils ne voient que les imprimantes déclarées sur le serveur METAFRAME... (donc ça va pas chercher loin)


Message édité par Arjuna le 28-12-2005 à 11:11:55
Reply

Marsh Posté le 28-12-2005 à 11:11:26    

ps: c'est pas clair ce que je raconte. dans le post précédent, je parle du client du SI, pas citrix, puisque justement, citrix sait pas faire ce que je veux qu'il apprenne à faire avec mon programme :D

Reply

Marsh Posté le 28-12-2005 à 11:15:15    

ben je sais pas trop, j'y connais pas grand chose en fait.
les fichiers  ica je connais parce que j'ai déjà du en générer, mais sinon ben :whistle:
 
part contre pour les fichiers, on a simplement mappé des lecteurs reseaux, et ca marche, mais je serais incapable de t'en dire plus.

Reply

Marsh Posté le 28-12-2005 à 11:22:21    

a priori, il y a en effet une fonction de mapping de lecteurs réseaux, mais je ne trouve pas comment ça marche. en effet, le client "monte" les lecteurs réseau et imprimantes, mais ils n'apparaissent pas une fois connectés (ni imprimantes ni lecteurs :/)

Reply

Marsh Posté le 28-12-2005 à 11:35:09    

Voilà ce que ça donne :
 
Au lancement d'une application depuis le client Citrix :
http://magicbuzz.multimania.com/files/citrix2.PNG
=> Il cherche bien à mapper des clients réseaux
 
Une fois loggué.
http://magicbuzz.multimania.com/files/citrix.PNG
 
Ici, une fenêtre de session "Exporer" ouverte sur le serveur Metaframe, et par dessus (en bas à droite) un explorateur Windows Local.
 
On voit bien dans l'explorateur distant le répertoire "test" qui est partagé. Idem pour le lecteur réseau L: monté depuis un autre serveur.
 
Pourtant, dans mon lecteur explorateur local, on ne voit ni l'un ni l'autre.
Le user que j'ai utilisé pour se loguer à Citrix est admin du domain, et a les droits nécessaires pour voir tout ça. Mais rien n'y fait, y'a que pouic.

Reply

Marsh Posté le 28-12-2005 à 11:51:21    

Rien compris :heink:
 
Je suis allé dans les outils de config, j'ai rien touché, juste validé, et maintenant je peux imprimer sur mes imprimantes locales et je peux accéder à mes disques locaux :heink:
 
Bon, problème à moitié résolu, reste plus qu'à trouver un moyen simple de rappatrier le fichier en local et de le transformer en document Excel quand nécessaire :D

Reply

Marsh Posté le 28-12-2005 à 11:53:00    

Je crois qu'en fait, je vais pas me prendre le choux. Je vais demander au client d'installer Excel et Word sur le serveur, ça va être très simple...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed