Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'exécute à l'ouverture de l'application sur la station l'appel à un composant présent sur le serveur CITRIX :
OleObject lole_appli lole_appli = CREATE OleObject lole_appli.ConnectToNewObject("WScript.Shell") lole_appli.Run("MonAppli")
J'aimerais killer MonAppli à la fermeture de l'application principale. On m'a conseillé de récupérer le ProcessID de MonAppli et ensuite d'utiliser une méthode EndProcess. D'accord, mais comment récupérer le PID de MonAppli ? Je pense que le problème est le même que ce soit sous CITRIX ou en C/S traditionnel (mais je peux me tromper ;))
Dernière modification par sbouvetJD (31-03-2008 11:22:25)
Hors ligne














Hors ligne
J'ai un message d'erreur "Error calling external object eval". J'avais essayé à tout hasard la méthode du topic 186 qui permet de vérifier si un exe est déjà lancé ou non, mais là aussi j'avais une erreur "Error calling external object count... Je continue à creuser...
Hors ligne
regardes mon outil findpick...
il y a un bout de script qui te permet de localiser tout pid d'un programme pb (que ce soit en runtime ou via le mode dev)...
avec ca, tu pourras l'adapter ,et tu pourras ainsi killer ton process.

Hors ligne
Bon j'ai découvert mon erreur : cela provient du fait que j'essayais de filtrer sur le propriétaire du process :
Select * from Win32_Process where Username = "UserName"
Or Username n'est pas une propriété de Win32_Process, il faut que je passe par getOwner... La suite dans quelques instants.
Merci Pick ouic pour l'aide que findpick m'a apportée !! (Eh ! Ma grand-mère habite à Massy !! )
Hors ligne
La solution :
String ls_username, ls_code UO_WFApi uo_citrix Integer li_ret OleObject lole_appli, lole_mssc Any la_res lole_appli = CREATE OleObject uo_citrix = Create UO_WFApi lole_mssc = CREATE OleObject li_ret = lole_appli.ConnectToNewObject("WScript.Shell") li_ret = lole_mssc.ConnectToNewObject( "MSScriptControl.ScriptControl" ) ls_username = uo_citrix.uf_getinfosession("username") lole_mssc.language = "VBScript" ls_code = "function services() ~r~n" & + "strNameOfUser = ~"~"~r~n" & + "s = ~"~"~r~n" & + "Set colProcesses = GetObject(~"winmgmts:{impersonationLevel=impersonate}!\\" + NomServeurCitrix + "\root\cimv2~").ExecQuery(~"Select * from Win32_Process where Name='" + MonProcess + "'~")~r~n" & + "For Each objProcess in colProcesses~r~n" & + "ret = objProcess.GetOwner(strNameOfUser)~r~n" & + "If ret <> 0 Then~r~n" & + "s = s & ~"Aucun,~"~r~n" & + "Else~r~n" & + "s = s & strNameOfUser & ~",~"~r~n" & + "End If~r~n" & + "Next~r~n" & + "services=s~r~n" & + "end function" lole_mssc.AddCode(ls_code) la_res = lole_mssc.Eval("services()") lole_mssc.DisconnectObject() If Pos(String(la_res), ls_username, 1) = 0 Then li_ret = lole_appli.Run(MonProcess) End If DESTROY lole_mssc DESTROY lole_appli
Bon, ça le kill pas, mais ça évite d'en rouvrir un !
Dernière modification par sbouvetJD (31-03-2008 11:23:07)
Hors ligne