Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Service NT]

17 réponses
Avatar
Jean-Yves BURLOT
Bonjour,

Je cherche à développer un service NT (compatible Win 2K et XP) sous
Windev (mini version 10).
Es ce possible et quels sont les pièges à éviter.
Peut-on gérer le service avec les outils windows.

Si la création et la gestion de service est impossible avec l'outil
windev, peut-on trouver une solution médiane qui remplace un service
par un système équivalent entièrement développer sous windev.

Je vous remercie

@+

--
Jean-Yves BURLOT
suivre ce lien pour répondre :
http://cerbermail.com/?zbQ7wrKUbu
;-)
--

7 réponses

1 2
Avatar
Romain PETIT
Dans son message précédent, patrice a écrit :
lapalissade: tout message n'est recu que s'il est lu.
tout programme windows à la structure:
while (getmessage()) dispatchmessage()
donc pendant le traitement d'un message , un thread ne peut traiter d'autre
message



Mais pourquoi peut-on trapper l'évenement WM_SYSCOMMAND lorsque l'arret
de l'appli est effectuée depuis l'interface :

// code projet
Evénement("QUITTE", "*.*", 0x112)//WM_SYSCOMMAND
// procédure globale
PROCEDURE QUITTE(eMessage, wParam, ePAram )
Trace(eMessage + "-" +wParam +"-" +ePAram)
SI wParam = 61536 ALORS
SI pas OuiNon("Fin?") ALORS
RENVOYER Faux
FIN
FIN



Mais pas quand XYNT envoie (au choix) un :
- PostThreadMessage(pProcInfo[nIndex].dwThreadId,WM_SYSCOMMAND,
SC_CLOSE,0);
- PostThreadMessage(pProcInfo[nIndex].dwThreadId,WM_CLOSE,0,0);
- PostThreadMessage(pProcInfo[nIndex].dwThreadId,WM_QUIT,0,0);


Solution simple : reprendre le code XYNTService, et lors de l'arret du
service, utiliser un autre type de dialogue avec l'appli Windev
(utilisation d'un fichier, d'une Socket, d'un pipe...)





tout a fait.
amha, la solution la plus simple:
- temporiser xyntservice pour qu'il ne terminate que si x secondes se
sont écoulés



Ca c'est déjà prévu (un paramètre dans le fichier INI)

- modifier l'exe pour lui faire tester le wm_quit (donc faire une
fenetre principale) et faire les traitements :
soit sur timer et ne pas durer plus de x secondes à chaque fois
soit sur thread, et le traitement du wm_quit doit synchroniser le
thread



C'est ce que j'ai testé (cf plus haut...).
L'évenement n'est pas détecté...

sinon pour notifer un programme par un autre, le plus simple/rapide est
d'utiliser les signaux (api createevent, openevent, waitforsingleevent)



Je vais jeter un oeil...

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Daniel
Romain PETIT a écrit :
Dans son message précédent, patrice a écrit :
lapalissade: tout message n'est recu que s'il est lu.
tout programme windows à la structure:
while (getmessage()) dispatchmessage()
donc pendant le traitement d'un message , un thread ne peut traiter
d'autre
message



Mais pourquoi peut-on trapper l'évenement WM_SYSCOMMAND lorsque l'arret
de l'appli est effectuée depuis l'interface :

// code projet
Evénement("QUITTE", "*.*", 0x112)//WM_SYSCOMMAND
// procédure globale
PROCEDURE QUITTE(eMessage, wParam, ePAram )
Trace(eMessage + "-" +wParam +"-" +ePAram)
SI wParam = 61536 ALORS
SI pas OuiNon("Fin?") ALORS
RENVOYER Faux
FIN
FIN



Mais pas quand XYNT envoie (au choix) un :
- PostThreadMessage(pProcInfo[nIndex].dwThreadId,WM_SYSCOMMAND,
SC_CLOSE,0);
- PostThreadMessage(pProcInfo[nIndex].dwThreadId,WM_CLOSE,0,0);
- PostThreadMessage(pProcInfo[nIndex].dwThreadId,WM_QUIT,0,0);


Solution simple : reprendre le code XYNTService, et lors de l'arret du
service, utiliser un autre type de dialogue avec l'appli Windev
(utilisation d'un fichier, d'une Socket, d'un pipe...)





tout a fait.
amha, la solution la plus simple:
- temporiser xyntservice pour qu'il ne terminate que si x secondes se
sont écoulés



Ca c'est déjà prévu (un paramètre dans le fichier INI)

- modifier l'exe pour lui faire tester le wm_quit (donc faire une
fenetre principale) et faire les traitements :
soit sur timer et ne pas durer plus de x secondes à chaque fois
soit sur thread, et le traitement du wm_quit doit synchroniser le
thread



C'est ce que j'ai testé (cf plus haut...).
L'évenement n'est pas détecté...

sinon pour notifer un programme par un autre, le plus simple/rapide est
d'utiliser les signaux (api createevent, openevent, waitforsingleevent)



Je vais jeter un oeil...

A+




Le WM_quit de XYNTService va générer dans l'appli Windev un évènement
WM_close.

En déclenchant ton code dans Windev avec WM_close cela devrait le faire.

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
Romain PETIT
Daniel avait énoncé :
Le WM_quit de XYNTService va générer dans l'appli Windev un évènement
WM_close.

En déclenchant ton code dans Windev avec WM_close cela devrait le faire.



Non, c'est bien ça le problème... auncun évenement n'est détecté...

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
//
Romain PETIT a écrit :

Non, c'est bien ça le problème... auncun évenement n'est détecté...



stMsg est une structure
hwnd est un entier
nMessage est un entier sans signe
wParam est un entier
lParam est un entier
time est un entier
pt est un entier
FIN

Msg est un stMsg

TANTQUE API("User32.dll","GetMessageA",&Msg,Null,0,0) <> 0
Multitache(-10)
FIN
Avatar
Romain PETIT
// a exposé le 14/01/2008 :

Msg est un stMsg

TANTQUE API("User32.dll","GetMessageA",&Msg,Null,0,0) <> 0
Multitache(-10)
FIN



Non...même avec la bonne structure (cf ci-dessous)...
Je suppose que le programme WD intercepte le message WM_QUIT en amont
(éventuellement redistribué lors de l'utilisation de Evenement) mais ce
message n'est pas relayé par ailleurs...

A+

stPOINTAPI est une structure
x est un entier
y est un entier
FIN

stMsg est une structure
hwnd est un entier
nMessage est un entier
wParam est un entier
lParam est un entier
time est un entier
pt est un stPOINTAPI
FIN

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Romain PETIT a écrit :

Hum, je crois que l'explication est ici...
http://support.microsoft.com/kb/462038/fr

En envoyant un PostMessage(lehandledelafenetre, 0x0012,0,0), celui-ci
est bien reçu...

Mais problème...une appli en tant que service n'a pas forcément de
fenetre...

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
patrice
"Romain PETIT" a écrit dans le message de
news:

Mais problème...une appli en tant que service n'a pas forcément de
fenetre...




c'est pour ca que j'avais suggéré l'utilisation des signaux nommés

xymachin signale "xymachin_quitte"

et l'appli fait un truc du genre
boucle
si est_signalé("xymachin_quitte") alors finprogramme()
ma_tache_repétitive_qui_doit_pas_durer_trop_longtemps()
fin
1 2