[.NET2] WRAPPER POUR API WINDOWS TERMINAL SERVICES.
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 2014
-
17 juin 2008 à 17:51
cedricsynix
Messages postés4Date d'inscriptionsamedi 21 janvier 2006StatutMembreDernière intervention 2 septembre 2009
-
2 sept. 2009 à 15:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cedricsynix
Messages postés4Date d'inscriptionsamedi 21 janvier 2006StatutMembreDernière intervention 2 septembre 2009 2 sept. 2009 à 15:33
Salut,
Tout d'abord, merci de partages tes efforts et connaissances avec nous autres.
J'aimerais savoir comment récupérer l'IP du client. Pas l'ip lan mais WAN.
Quand je fais ceci, c'est l'ip 192.168.x.x qui est retournée et non 212.166.x.x
Si qq d'autre à une idée pour trouver l'ip d'un client connecté, ca m'intéresse :)
Merci d'avance,
Cédric
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 17 oct. 2008 à 23:24
Etrange, cela tourne depuis des mois sur des applis sous Windows2000 Pro et XP et RAS...
As-tu un cluster de monter sur tes serveurs TSE ?
nethobbit
Messages postés1Date d'inscriptionsamedi 24 décembre 2005StatutMembreDernière intervention17 octobre 2008 17 oct. 2008 à 17:01
Je crois avoir le même problème que Dimitriusai. J'utilise le dll à partir d'une classe dans une appli Winforms en C#. Je peux exécuter l'application une fois ou deux, mais à la longue l'appli gèle lors de l'appel à la fonction Close() de la dll. Et j'ai un processus "vshost" qui persiste toujours. Le "try/catch" que j'ai codé n'est jamais atteint car je n'ai aucun retour de l'appel à Close().
dimitriusai
Messages postés76Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention 7 mai 20091 3 juil. 2008 à 11:23
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
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 3 juil. 2008 à 11:05
Que veux-tu dire par "cela plante" ?
Tu as une exception de levée ?
dimitriusai
Messages postés76Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention 7 mai 20091 3 juil. 2008 à 10:33
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.
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 3 juil. 2008 à 10:29
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.
++
dimitriusai
Messages postés76Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention 7 mai 20091 3 juil. 2008 à 10:17
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)
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 2 juil. 2008 à 13:17
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.
dimitriusai
Messages postés76Date d'inscriptionlundi 6 novembre 2006StatutMembreDernière intervention 7 mai 20091 2 juil. 2008 à 12:02
Hello, j'ai testé ton appli et fait une exception qui est levée.
Et ce lors de cette ligne ci
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
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 18 juin 2008 à 17:52
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 !
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 18 juin 2008 à 13:51
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 ?
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 18 juin 2008 à 11:52
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 ?
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 18 juin 2008 à 10:42
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
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 18 juin 2008 à 09:51
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...) ??
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 18 juin 2008 à 08:18
Oups, j'aurais pas du mettre 10... stack overflow exception sur win2003 contenant plusieurs sessions rdp et ica
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 18 juin 2008 à 08:06
aller un ptit 10
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 18 juin 2008 à 08:05
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
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 17 juin 2008 à 18:28
Salut eldim,
+1 pour Environment.UserDomainName ;)
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 17 juin 2008 à 17:51
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
2 sept. 2009 à 15:33
Tout d'abord, merci de partages tes efforts et connaissances avec nous autres.
J'aimerais savoir comment récupérer l'IP du client. Pas l'ip lan mais WAN.
Quand je fais ceci, c'est l'ip 192.168.x.x qui est retournée et non 212.166.x.x
Si qq d'autre à une idée pour trouver l'ip d'un client connecté, ca m'intéresse :)
Merci d'avance,
Cédric
17 oct. 2008 à 23:24
As-tu un cluster de monter sur tes serveurs TSE ?
17 oct. 2008 à 17:01
3 juil. 2008 à 11:23
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
3 juil. 2008 à 11:05
Tu as une exception de levée ?
3 juil. 2008 à 10:33
Je ne vois vraiment pas d'où vient le problème.
3 juil. 2008 à 10:29
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.
++
3 juil. 2008 à 10:17
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)
2 juil. 2008 à 13:17
Lance le débogage et regarde à quel moment dans GetTimeInfo l'exception est levée.
2 juil. 2008 à 12:02
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
18 juin 2008 à 17:52
Je vais essayé sur une session tse !
18 juin 2008 à 13:51
18 juin 2008 à 11:52
Tu as des sessions qui utilisent un autre protocole que rdp ?
18 juin 2008 à 10:42
18 juin 2008 à 09:51
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...) ??
18 juin 2008 à 08:18
18 juin 2008 à 08:06
18 juin 2008 à 08:05
17 juin 2008 à 18:28
+1 pour Environment.UserDomainName ;)
17 juin 2008 à 17:51
ç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