Set ProcessID avec WMI ?

Set ProcessID avec WMI ? - VB/VBA/VBS - Programmation

Marsh Posté le 12-05-2005 à 14:09:14    

Bonjour,
 
J'essai de lancer une application en lui attribuant un PID prédéfini mais sans succès, je ne sais pas d'ailleurs si c'est techniquement possible avec WMI.
 
Quelqu'un aurait il une idée ?
 

Code :
  1. Const HIDDEN_WINDOW = 1
  2. strComputer = "."
  3. Set objWMIService = GetObject("winmgmts:" _
  4. & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2" )
  5. Set objStartup = objWMIService.Get("Win32_ProcessStartup" )
  6. Set objConfig = objStartup.SpawnInstance_
  7. objConfig.ShowWindow = HIDDEN_WINDOW
  8. Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process" )
  9. IntProcessID = objProcess.ProcessID(900)
  10. objProcess.Create "notepad.exe", Null, objConfig, IntProcessID
  11. Wscript.Echo "notepad.exe demarre avec un process ID de " _
  12. & IntProcessID & "."


 
ça compile mais en aucun cas le PID est égal à 900...

Reply

Marsh Posté le 12-05-2005 à 14:09:14   

Reply

Marsh Posté le 12-05-2005 à 14:25:42    

C'est dans IntProcessID que tu récupères le ProcessID donné par l'OS.


Message édité par AlainTech le 12-05-2005 à 14:25:58

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 12-05-2005 à 14:33:36    

Merci pour ta réponse Alain.
 
C'est bien ce que j'avais cru comprendre : IntProcessID me permet juste de récupérer le PID mais comment faire alors pour forcer ce PID dès sa création ?
 
A ma connaissance il n'y a pas de fonction Set ProcessID, bref j'ai un peu de mal à entrevoir une solution.

Reply

Marsh Posté le 12-05-2005 à 14:34:55    

C'est l'OS qui donne le ProcessId.
 
N'essaye pas de trouver à le contourner, c'est comme ça.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 12-05-2005 à 14:44:58    

Ok donc si je comprends bien je n'ai aucun moyen de prédéfinir le PID et donc de lancer un process avec un PID de mon choix.
 
Bon cela me pose donc un sacré problème.
 
Merci en tout cas Alain  :hello:

Reply

Marsh Posté le 12-05-2005 à 16:06:42    

Pourquoi cela te pose-t-il un problème?
 
Je suppose que tu veux pouvoir agir sur ce process. Donc, il te suffit de récupérer le PID au lancement et t'en servir par la suite.


Message édité par AlainTech le 12-05-2005 à 16:07:15

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 13-05-2005 à 00:36:23    

Bien je vais essayer de faire simple et clair.
 
Je suis sys op de serveurs de jeux. Certain serveurs sont sous windows 2k server.
Les joueurs controlent l'arrêt et le lancement des jeux via une interface en PHP qui en fin de chaine lance ou coupe le jeu via un start.vbs et stop.vbs quelque peu identiques au code ci-dessus.
 
Lorsqu'un jeu est installé plusieurs fois sur une meme machine j'avais l'habitude de renommer les *.exe pour les distinguer.
 
Ainsi et à titre d'exemple le stop.vbs du jeu numero 1 ressemble à ceci :
 

Code :
  1. strComputer = "."
  2. Set objWMIService = GetObject("winmgmts:" _
  3.     & "{impersonationLevel=impersonate}!\\" _
  4.     & strComputer & "\root\cimv2" )
  5. Set colProcessList = objWMIService.ExecQuery _
  6.     ("Select * from Win32_Process Where Name = 'jeux1.exe'" )
  7. For Each objProcess in colProcessList
  8.     objProcess.Terminate()
  9. Next


 
Aujourd'hui je suis face à un jeu dont il est impossible de renommer l'executable, sinon le jeu ne se lance pas. Mes Stop.vbs sont donc caduques car en executant un stop.vbs je coupe tous les jeux et non seulement celui concerné...
 
J'espérais donc pouvoir lancer le jeu en lui attribuant un PID prédéfini et ainsi le couper en utilisant son PID.
 
Il va donc falloir que je trouve une autre solution...
 
Je pense éventuellement, une fois le jeu lancé, à enregistrer le PID du jeu numero 1 dans un fichier tiers et le récupérer ensuite pour pouvoir le couper ... Je pourrais éventuellement enregistrer le PID dans une BDD... Bref voilà l''histoire à l'instant présent...


Message édité par Orage878 le 13-05-2005 à 00:45:20
Reply

Marsh Posté le 13-05-2005 à 07:14:01    

Mais si tu connias le fichier exe, récupère son PID avec un script, su style un Sleep pdt 5s puis le script cherche dans les exécutions en cours le PID correspondant au jeu. Non ?


---------------
now : do nothing
Reply

Marsh Posté le 13-05-2005 à 09:09:58    

knakes a écrit :

Mais si tu connias le fichier exe, récupère son PID avec un script, su style un Sleep pdt 5s puis le script cherche dans les exécutions en cours le PID correspondant au jeu. Non ?


Son problème, c'est qu'il peut avoir plusieurs instances du même jeu.
Il doit donc garder une trace du PID attribué au lancement.


---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 13-05-2005 à 13:18:20    

ben justement
tu redirige le raccourcis vers un srcipt
qui va regarder le PID -> le pid du jeu lancé.
 
Le soucis, c'est que les joueurs ne peuvent passer que par là.


---------------
now : do nothing
Reply

Sujets relatifs:

Leave a Replay

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