Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[.NET2] WRAPPER POUR API WINDOWS TERMINAL SERVICES.


Information sur la source

Catégorie :Système Source .NET ( DotNet ) Classé sous : wts, terminal, services, tse Niveau : Initié Date de création : 16/06/2008 Date de mise à jour : 03/07/2008 10:27:04 Vu / téléchargé: 2 540 / 85

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note


Description

Cette source fournit un wrapper pour une partie de l'API Windows Terminal Services. A savoir.
-Retrouver les serveurs TS d'un domaine.
-Enumèrer toute les sessions (TSE et console) sur un serveur TS (peu importe l'état de la session).
-Enumèrer les sessions (TSE et console) selon leur état (Active/Connecter/Déconnecter).
-Retrouver le nom utilisateur d'une session TSE à partir d'un session ID.
-Retrouver le session ID à partir du nom utilisateur de la session TSE.
-Obtenir une multitude d'informations sur une session à partir de son session ID ou du nom utilisateur TSE. (Adresse ip du client, nom du client, protocole, domaine,nom de la station cliente...)
-Obtenir des informations de temps sur une session (Connect time, Login time, idle time, disconnected time, last input time)
-Rechercher un utilisateur TSE sur l'ensemble des serveurs TS un domaine et obtenir le nom du serveur TS sur lequel il est connecté.
-Envoyer un message à une session à partir de son session ID ou de son nom utilisateur TSE.

Utilisation d'un api nom documenté pour obtenir des infos de temps sur session TSE: http://groups.google.com/group/microsoft.public.win32.programmer.kernel/browse_thread/thread/c6dd86e7df6d26e4/91fc4e79a5d6c495?lnk=st&q=%22terminal+services%22+api+session+idle+time&rnum=1&hl=en#91fc4e79a5d6c495

Une démo console est également fournit dans la source !.

Je pense avoir fait le tour de la source. Ah si celle ci est documentée et commentée.
 

Conclusion

Bon développement à tous.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

03 juillet 2008 10:27:05 :
modif code démo.

Commentaires et avis

signaler à un administrateur
Commentaire de eldim le 17/06/2008 17:51:12

Salut,
ça à pas l'air mal même si je n'ai pas vu toutes les infos...
ce qui serait un plus c'est d'utiliser Environment.UserDomainName
à la place de ton domain en dur

signaler à un administrateur
Commentaire de Willi le 17/06/2008 18:28:56 administrateur CS

Salut eldim,
+1 pour Environment.UserDomainName ;)

signaler à un administrateur
Commentaire de eldim le 18/06/2008 08:05:49

lol, j'ai regardé plus en détail le reste du code... purée c'est clair bien commenté, bien classé et surtout j'y ai appri un truc sympa : l'utilisation du yield que je ne connaissais pas. bon boulot

signaler à un administrateur
Commentaire de eldim le 18/06/2008 08:06:52 10/10

aller un ptit 10

signaler à un administrateur
Commentaire de eldim le 18/06/2008 08:18:47

Oups, j'aurais pas du mettre 10... stack overflow exception sur win2003 contenant plusieurs sessions rdp et ica

signaler à un administrateur
Commentaire de Willi le 18/06/2008 09:51:04 administrateur CS

La gestion des execptions est surement à revoir j'en conviens !
Pourtant j'en ai fait des séries de test avant de le mettre en prod où je bosse.
Où, à quel moment, le contexte (nb de sessions, sur domaine ?, etc...) ??

signaler à un administrateur
Commentaire de eldim le 18/06/2008 10:42:33

je l'ai executé sur un 2 serveurs différents chacun ayant un faible nombre de sessions ouvertes : pas plus de 15. Certains ont des sessions déconnectées mais toujours actives. Le programme donne en gros entre 3 et 5 sessions correctement puis donne un ID de session et plante

signaler à un administrateur
Commentaire de Willi le 18/06/2008 11:52:13 administrateur CS

Etrange j'ai testé sur 2 serveurs TS avec chacun 10/15 sessions et aucun problème...
Tu as des sessions qui utilisent un autre protocole que rdp ?

signaler à un administrateur
Commentaire de eldim le 18/06/2008 13:51:03

oui sur un des server j'ai du ica mais sur l'autre ça a planté pareil... peut-être un problème de droit... pourtant je l'ai exécuté en tant qu'admin du domain... à partir d'une session tse c'est surement parce que j'étais sur une session non ?

signaler à un administrateur
Commentaire de Willi le 18/06/2008 17:52:16 administrateur CS

Ah ok. je l'ai essayé uniquement sur des postes dans un domaine avec un utilisateur admin de son poste.
Je vais essayé sur une session tse !

signaler à un administrateur
Commentaire de dimitriusai le 02/07/2008 12:02:58

Hello, j'ai testé ton appli et fait une exception qui est levée.
Et ce lors de cette ligne ci

WTSLib.SessionTimeInfos sess_t = wts.GetTimeInfo(hServer, sess, sess_ext.WTSConnectState);

Qui permet d'avoir les informations de temps.

Une exception non gérée du type 'System.ExecutionEngineException' s'est produite dans WTSLib.dll
Si tu as une idée

Merci d'avance

signaler à un administrateur
Commentaire de Willi le 02/07/2008 13:17:23 administrateur CS

Cette méthode utilise une méthode non documentée de l'api de wts. Il se peut que ton client ne prenne pas en charge celle-ci.
Lance le débogage et regarde à quel moment dans GetTimeInfo l'exception est levée.

signaler à un administrateur
Commentaire de dimitriusai le 03/07/2008 10:17:15

Après quelques heures de travail, j'ai réussi à faire fonctionner wts, sur un serveur, mais mon but est de tester plusieurs serveurs, je fais donc une boucle afin de récupérer ces informations (dans le domaine bien sur ^^) mais il y a un plantage de wts après quelques serveurs.
Qu'en penses-tu ? le fais tu sur plusieurs serveurs ou sur un serveur unique ?
Connais tu unes autre solution afin de récupérer ce genre d'information.

Merci d'avance et Cordialement.(USAI.D)

signaler à un administrateur
Commentaire de Willi le 03/07/2008 10:29:12 administrateur CS

Pas d'erreur après bouclage sur 3 serveurs TS.
Mais à chaque changement de serveur TS tu dois ouvrir un handler sur celui-ci et le libérer à la fin avec les méthodes Open("NomServeurTs") et Close() comme dans l'exemple.

++

signaler à un administrateur
Commentaire de dimitriusai le 03/07/2008 10:33:36

Ok merci. Je vais abandonner cette solution car de mon coté cela plante après un ou deux serveurs et les infos ne sont pas tjrs correct alors que le handle est bien ouvert et fermé comme tu l'expliques bien dans ta source.

Je ne vois vraiment pas d'où vient le problème.

signaler à un administrateur
Commentaire de Willi le 03/07/2008 11:05:23 administrateur CS

Que veux-tu dire par "cela plante" ?
Tu as une exception de levée ?

signaler à un administrateur
Commentaire de dimitriusai le 03/07/2008 11:23:58

rien n'est levé, le try catch ne détecte rien du tt. Le programme plante simplement.  Dans la boucle suivante.

Try
            For i As Integer = 0 To MysqlResult1.Count - 1
                Dim wts As New WTSHelper()
                Dim count As Integer = 0
                Dim hServer As IntPtr = wts.Open(MysqlResult1(i).Item(0).ToString)
                MsgBox(MysqlResult1(i).Item(0).ToString)

                For Each sess As Integer In wts.EnumAllSessionsId(hServer)

                    Dim sess_ext As WTSLib.WTS_SESSION_INFO_EXT = wts.GetSessionInfos(hServer, sess)

                    sess_ext.ToString()
                    Dim tab As New ArrayList
                    Dim tab2(3)
                    tab2(0) = sess_ext.WTSUserName
                    tab2(1) = sess_ext.WTSClientName
                    tab2(2) = sess_ext.WTSSessionId
                    tab2(3) = statuschng(sess_ext.WTSConnectState)
                    'tab.Add(tab2)
                    'DataGridView1.Rows.Add(tab)

                Next
                wts.Close(hServer)
            Next

        Catch ex As Exception
            MsgBox("catch" & ex.Message)
        End Try

J'ai réutilisé ta dll en vb.net

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

DLL et Services Web [ par rafraf ] Salut à tous ! J'ai un petit pb avec les DLL en code non managé, en mode Service Web, J'essaye de faire appel à une DLL dans un service web, j construire une couche métier pour des web-services [ par sabugo ] Bijour !!!Vala : il y a longtemps, lol. lorsque .net était encore en version béta, j'ai développé un site en asp.net... donc quelques notions il me re se servir d'un web services dnas une appli cliente [ par andrau ] Bonjour à tous, j'ai un probleme, je voudrais reussir a me servir d'un web services en c#j'ai fait un test en local avec iis (//localhost/...) ca marc Certifications [ par MorpionMx ] Bonjour, Je pensais, dès septembre, me mettre a passer 2 - 3 certifications ( Applications Windows C#, Applications Web C# et WebServices + composants Serveur vocal C# [ par Zebra1928 ] bonjour,J'ai besoin de savoir comment implementer un serveur vocal fondé sur des pages web asp.net ecrites en C#, Voice XML ou XML et les services web Sharepoint Services, Webparts et perso de VS 2003 [ par nimp0001 ] Bonjour,Je suis actuellement en train de developper un webpart pour un site Sharepoint Services (pas de sharepoint server mais c'est du pareil au même Probleme de connexion a un web service [ par landracul ] Bonjourvoila je test un web sevice de base qui additionne 2 entiers:je l'ai généré via VS.NETSi je test le service via IE: http://local sql server reporting services [ par elyadouni ] je veus savoir comment générer des rapports à partir d'une base de données, quel outil utilisé, faut installer sql serve Appli C# en TSE [ par yohbrousse ] Je dois réaliser une application C# en TSE (qui sera sur le serveur et qui sera appelée depuis un client leger)qui doit interroger une base SQL Reporting Services! [ par Son_of_the_Sun ] Bonjour tout le monde... Ca fait 5 jours que je suis dessus car je suis en stage et il faut absolument que j'avance... Le projet consiste a gén&


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,47 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.