Problème de fermeture de session suite à la création service interactif

Le
Julien Malghem [MVP]
Bonjour,

J'écris un service Windows qui interagit avec le bureau. Ou plus exactement,
il lance un process possédant une GUI.
Lorsque la machine démarre, le process se lance correctement, après une
première ouverture de session, la GUI est bien affichée. Si je ferme et
réouvre ma session, la GUI est toujours présente mais ensuite impossible de
fermer ma session ou redémarrer l'ordinateur A moins d'arrêter le service
(impossible)

Quelqu'un saut-il comment faire pour résoudre ce problème ?

Le message retourné par l'eventlog lors de la tentative de fermeture de
session est :
Type de l'événement : Avertissement
Source de l'événement : USER32
Catégorie de l'événement : Aucun
ID de l'événement : 1073
Date : 11/08/2005
Heure : 10:26:33
Utilisateur : AUTORITE NTSYSTEM
Ordinateur : FPDI-LAP-MALGHJ
Description :
Échec de la tentative de inconnu FPDI-LAP-MALGHJ

J'ai pensé comme solution de switcher le processus dans le desktop
Service-0x0-3e7$ au moment de la fermeture de session, mais je n'y parviens
pas
Les fonctions SetThreadDesktop ou SetProcessWindowStation ne peuvent être
appliquées que sur le Thread ou le Process appelant. Or ce n'est pas mon cas
puisque mon processus appelant est mon programme principal et non mon
processus fils

Toute idée sera la bienvenue,

Merci d'avance,
Julien
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Lloyd Dupont
Le #12406411
je dirais que Windows n'arrive pas a terminer ar il attend que le service
s'arrete et peut-etre le service attends-t'il que le GUI process soit
terminer pour finir?

c'est une sorte de Chicken & Egg problem, on dirait....

--
If you're in a war, instead of throwing a hand grenade at the enemy, throw
one of those small pumpkins. Maybe it'll make everyone think how stupid war
is, and while they are thinking, you can throw a real grenade at them.
Jack Handey.
"Julien Malghem [MVP]" news:%
Bonjour,

J'écris un service Windows qui interagit avec le bureau. Ou plus
exactement, il lance un process possédant une GUI.
Lorsque la machine démarre, le process se lance correctement, après une
première ouverture de session, la GUI est bien affichée. Si je ferme et
réouvre ma session, la GUI est toujours présente mais ensuite impossible
de fermer ma session ou redémarrer l'ordinateur... A moins d'arrêter le
service (impossible)...

Quelqu'un saut-il comment faire pour résoudre ce problème ?

Le message retourné par l'eventlog lors de la tentative de fermeture de
session est :
Type de l'événement : Avertissement
Source de l'événement : USER32
Catégorie de l'événement : Aucun
ID de l'événement : 1073
Date : 11/08/2005
Heure : 10:26:33
Utilisateur : AUTORITE NTSYSTEM
Ordinateur : FPDI-LAP-MALGHJ
Description :
Échec de la tentative de inconnu FPDI-LAP-MALGHJ

J'ai pensé comme solution de switcher le processus dans le desktop
Service-0x0-3e7$ au moment de la fermeture de session, mais je n'y
parviens pas...
Les fonctions SetThreadDesktop ou SetProcessWindowStation ne peuvent être
appliquées que sur le Thread ou le Process appelant. Or ce n'est pas mon
cas puisque mon processus appelant est mon programme principal et non mon
processus fils...

Toute idée sera la bienvenue,

Merci d'avance,
Julien



Lloyd Dupont
Le #12406401
En passant il fortement deconseiller d'ecrire un service avec une GUI.
La bonne pratique c'est d'ecrire un service qui sait parler au monde
exterieur (avec Remoting?) pui de faire une GUI qui lui parle.
Si tu veux qu'elle se lance au login, met la dans
HKEY_SOMEKEY_I_CANT_REMEMBERSoftwareWindowsCurrentVersionRun

--
If you're in a war, instead of throwing a hand grenade at the enemy, throw
one of those small pumpkins. Maybe it'll make everyone think how stupid war
is, and while they are thinking, you can throw a real grenade at them.
Jack Handey.
"Julien Malghem [MVP]" news:%
Bonjour,

J'écris un service Windows qui interagit avec le bureau. Ou plus
exactement, il lance un process possédant une GUI.
Lorsque la machine démarre, le process se lance correctement, après une
première ouverture de session, la GUI est bien affichée. Si je ferme et
réouvre ma session, la GUI est toujours présente mais ensuite impossible
de fermer ma session ou redémarrer l'ordinateur... A moins d'arrêter le
service (impossible)...

Quelqu'un saut-il comment faire pour résoudre ce problème ?

Le message retourné par l'eventlog lors de la tentative de fermeture de
session est :
Type de l'événement : Avertissement
Source de l'événement : USER32
Catégorie de l'événement : Aucun
ID de l'événement : 1073
Date : 11/08/2005
Heure : 10:26:33
Utilisateur : AUTORITE NTSYSTEM
Ordinateur : FPDI-LAP-MALGHJ
Description :
Échec de la tentative de inconnu FPDI-LAP-MALGHJ

J'ai pensé comme solution de switcher le processus dans le desktop
Service-0x0-3e7$ au moment de la fermeture de session, mais je n'y
parviens pas...
Les fonctions SetThreadDesktop ou SetProcessWindowStation ne peuvent être
appliquées que sur le Thread ou le Process appelant. Or ce n'est pas mon
cas puisque mon processus appelant est mon programme principal et non mon
processus fils...

Toute idée sera la bienvenue,

Merci d'avance,
Julien



Mehdi
Le #12406391
On Fri, 12 Aug 2005 12:07:08 +0200, Julien Malghem [MVP] wrote:

J'écris un service Windows qui interagit avec le bureau. Ou plus exactement,
il lance un process possédant une GUI.
Lorsque la machine démarre, le process se lance correctement, après une
première ouverture de session, la GUI est bien affichée. Si je ferme et
réouvre ma session, la GUI est toujours présente mais ensuite impossible de
fermer ma session ou redémarrer l'ordinateur... A moins d'arrêter le service
(impossible)...

Quelqu'un saut-il comment faire pour résoudre ce problème ?



Ne surtout pas faire ce genre de choses. Un service Windows ne doit pas
avoir d'interface utilisateur. En partie a cause des problemes que tu
mentionne ici, et en partie car cela ouvre un énorme trou de sécurité dans
ton systeme. L'appli que tu lance depuis ton service est lancée dans le
compte utilisateur de ton service qui est souvent Local System. Ce qui peut
potentiellement permettre a n'importe qui ayant access a cette machine
d'avoir un access administrateur sur ta machine.

Comme l'a dit Lloyd, cree une appli Windows normale qui se lance
automatiquement lorsqu'un utilisateur se log et communique entre ton appli
et ton service via .NET Remoting, une socket, shared memory, ce que tu
veux...
Julien Malghem [MVP]
Le #12406381
Bonjour et merci pour vos réponses.

"Mehdi" 16ztjw8adh167.1fxzgzrqsg052$
Ne surtout pas faire ce genre de choses. Un service Windows ne doit pas
avoir d'interface utilisateur. En partie a cause des problemes que tu
mentionne ici, et en partie car cela ouvre un énorme trou de sécurité dans
ton systeme. L'appli que tu lance depuis ton service est lancée dans le
compte utilisateur de ton service qui est souvent Local System. Ce qui
peut
potentiellement permettre a n'importe qui ayant access a cette machine
d'avoir un access administrateur sur ta machine.



Impossible, je n'ai pas la main sur l'application. Disons que je réécrit une
sorte de srvany.exe avec un peu plus d'option pour pouvoir lancer
l'application.
Mais je ne peux pas modifier l'exe existant malheureusement....

A+
Julien
Publicité
Poster une réponse
Anonyme