OVH Cloud OVH Cloud

Propriétaire d'un processus

2 réponses
Avatar
YaYOu
Bonjour

Je dois savoir combien de fois un exe est lancé sur un serveur.
Mais ce serveur est un serveur Citrix.
Donc je dois différencier les processus de chaque utilisateur.

Dans le gestionnaire des taches il y a l'option "Afficher la liste des
processus de tous les utilisateurs". Si elle est cochée on a tous les
processus qui tournent sur la machine. Si on la décoche on a juste les
processus de la session en cours.

Je voudrais donc filtrer mes processus par utilisateur.
J'utilise des API et en particulier CreateToolhelpSnapshot.
Mais je ne trouve rien me permettant de trouver l'utilisateur d'un
processus.

Merci d'avance à celui ou celle qui a une solution.

Jerome

2 réponses

Avatar
Jacques93
Bonjour YaYOu,
YaYOu a écrit :
Bonjour

Je dois savoir combien de fois un exe est lancé sur un serveur.
Mais ce serveur est un serveur Citrix.
Donc je dois différencier les processus de chaque utilisateur.

Dans le gestionnaire des taches il y a l'option "Afficher la liste des
processus de tous les utilisateurs". Si elle est cochée on a tous les
processus qui tournent sur la machine. Si on la décoche on a juste les
processus de la session en cours.

Je voudrais donc filtrer mes processus par utilisateur.
J'utilise des API et en particulier CreateToolhelpSnapshot.
Mais je ne trouve rien me permettant de trouver l'utilisateur d'un
processus.

Merci d'avance à celui ou celle qui a une solution.




Tu peux essayer ceci, à tester (je n'ai pas de serveur sous la main)
(Nécessite une référence à Microsoft WMI Scripting V1.2 Library :
wbemdisp.tlb).

Voir ici pour plus d'infos :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_process.asp

Option Explicit

Private Sub Command1_Click()
EnumProcessus
End Sub

Private Sub EnumProcessus(Optional strComputer As String = ".")
Dim Locator As SWbemLocator
Dim Service As SWbemServices
Dim colProcesses As SWbemObjectSet
Dim objProcess As SWbemObject
Dim User As String, Domain As String

Set Locator = New WbemScripting.SWbemLocator
Set Service = Locator.ConnectServer(strComputer, "rootcimv2")

Set colProcesses = Service.ExecQuery( _
"select * from win32_process")
Debug.Print colProcesses.Count; " Processus"
On Error Resume Next
For Each objProcess In colProcesses
If objProcess.GetOwner(User, Domain) = 0 Then
Debug.Print Pad(objProcess.Caption, 20) & _
" " & Domain & "" & User & _
" (" & objProcess.SessionID & ")"
Else
Debug.Print "Problème " & _
" pour trouver le propriétaire du processsus " _
& objProcess.Caption
End If
Next
End Sub

Private Function Pad(s As String, l As Long) As String
If Len(s) < l Then
Pad = s & Space(l - Len(s))
Else
Pad = Left(s, l)
End If
End Function



--
Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :
Bonjour YaYOu,
YaYOu a écrit :
Bonjour

Je dois savoir combien de fois un exe est lancé sur un serveur.
Mais ce serveur est un serveur Citrix.
Donc je dois différencier les processus de chaque utilisateur.

Dans le gestionnaire des taches il y a l'option "Afficher la liste des
processus de tous les utilisateurs". Si elle est cochée on a tous les
processus qui tournent sur la machine. Si on la décoche on a juste les
processus de la session en cours.

Je voudrais donc filtrer mes processus par utilisateur.
J'utilise des API et en particulier CreateToolhelpSnapshot.
Mais je ne trouve rien me permettant de trouver l'utilisateur d'un
processus.






Pour info, l'API utilisé pour TSE est WTSEnumerateProcesses

Un exemple ici :

http://support.microsoft.com/default.aspx?scid=kb;en-us;253140

Pas certain que cela fonctionne avec un serveur Citrix

--
Cordialement,

Jacques.