[C/WIN32] SERVICE WIN, ÉTEINT LE PC APRÈS 1H D'INACTIVITÉ.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
9 nov. 2006 à 20:04
cs_Masterminh
Messages postés1Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention10 juin 2008
-
10 juin 2008 à 09:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_Masterminh
Messages postés1Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention10 juin 2008 10 juin 2008 à 09:40
Bonjour,
Votre programme est vraiment très intéressant . Je voulais le testé mais hélas, quand je télécharge le .zip, il n'y a pas les fichiers .exe dedans ... Est ce que c'est normale ? je suis un nouveau sur le site. Dois-je le compiler moi même ?
Merci d'avance à ce qui peuvent me répondre.
magic_Nono
Messages postés1878Date d'inscriptionjeudi 16 octobre 2003StatutMembreDernière intervention16 mars 2011 21 nov. 2006 à 11:16
voilà quelque chose d'intéressant, je vais l'adapter pour une mise à jour réguliere d'une BD locale...
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 15 nov. 2006 à 15:31
Mr.x = aucun intéret de changez le nom de l'exe car sinon, le service forcément ne fonctionne pas. Mais ou le nom peut être un paramètre de la fonction install, pour peux que tu soit sur de dévelloper l'exe du service dans le mm dossier que le programme de controle ;).
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 13 nov. 2006 à 19:33
Je préfère la solution de la boite de dialogue car on n'a pas besoin d'arrêter puis relancer le service. Le service sera entiérement autonome.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 13 nov. 2006 à 19:24
Ce que je peut faire aussi, c'est dans mon programme d'install, mettre le champ de la valeur, et en mm temps il stop puis, remet en marche le service , et ainsi mon service prend en compte la nouvel valeur sans besoin de créer une boite de dialogue dans le service.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 13 nov. 2006 à 19:19
"dialogue de changement de cette durée" Ha oui ok, dans la fenêtre crée a partir du service, mais heu je n'en suis pas encore la :s ,je ne voi pas encore bien l'affaire avec une fenêtre dans le service. Mais sinon oui, j'ai compris :D
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 13 nov. 2006 à 19:13
Ton installateur de service crée une clé dans la base de registres. Cette clé contient la valeur par défaut. Au démarrage du service cette valeur sera chargée dans une variable. Cette variable sera utilisée par le service pour déterminer la durée du compte à rebours. Dans la boite de dialogue de changement de cette durée, on donne la nouvelle valeur. Juste après le clic sur le bouton "Ok", la variable prend cette nouvelle valeur et elle est ensuite enregistrée dans la base de registres. Cette valeur sera celle par défaut pour le prochain démarrage du service. On peut même la changer plusieurs fois pendant le fonctionnement du service.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 13 nov. 2006 à 18:33
"L'enregistrement d'une nouvelle valeur se fera juste après la modification." Je ne comprend pas bien le sens de cette phrase, Pour que la nouvelle valeur soit utilisée , il faut bien vérifié si elle à changer. Si tu lit la registry juste au début, si tu modifie cette valeur pdt que le service tourne, la valeur ne sera pas modifié, elle le sera seulement, lors d'un relancement du service alors .
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 13 nov. 2006 à 17:30
La lecture de la base de registres se fera seulement au lancement du service. L'enregistrement d'une nouvelle valeur se fera juste après la modification. Le service n'aura pas besoin de consulter la base de registres toutes les secondes car il lui suffit de regarder la variable contenant la nouvelle valeur.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 13 nov. 2006 à 17:14
Pas bête l'utilisation de la base de registre. Je m'en vai faire ça ;) , mais alors il faudra que à chaque vérification ( donc tout les secondes ) il aie lire le contenu de la key. Mais c'est pas bête :D
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 13 nov. 2006 à 14:04
Salut,
Arnaud16022 >> Moi je parle d'un service autonome à 100%, c'est à dire sans application externe. Dans l'exemple de FileZilla il parait que le service n'est qu'un élément de l'application. Le serveur étant le seul élément ayant besoin d'être lancé comme service. Il est en effet primordial de ne pas trop charger un service donc de le limiter au strict minimum. Dans les cas comme ce code source, on peut ajouter l'icone du systray, le menu contextuel et la boite de dialogue de paramétrage. Ca ne pose aucun problème.
Deck_Bsd >> Pour installer ou désinstaller le service, un autre exe est nécessaire pour éviter l'installation manuelle. Ton service peut démarrer avec une valeur par défaut inscrite dans la base de registres. Cette valeur sera ensuite modifiable par l'utilisateur autant de fois qu'il le désire. Pendant le fonctionnement du service, cette valeur sera contenu dans une simple variable.
cs_Mr.X
Messages postés118Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 2 novembre 2007 13 nov. 2006 à 08:43
salut j'ai peut-être regarder trop rapidement le code mais :
while(*c != '\\')c--;
*++c = 0;
lstrcat(szServPath,"SHUTD.exe");
sa serais pas plutôt
lstrcat(szServPath, c); ?
Parce que la si on change le nom de l'exe c'est foutu.
Une petite idée sa pourrai être de mettre des paramètre dans InstallService(), sa rend les fonctions plus modulaire et nous permet de réutiliser la fonction dans nos programmes ^^
Sinon c'est intéréssant, bonne source 7/10
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 12 nov. 2006 à 17:23
RACPP : Je le pensai aussi que j'avai pas besoin d'un autre exe, mais Arnotic ma dit le contraire :s . et aussi mon exe de control ne sert pas a arreter ou non le service, mais bien à l'installé ou le désinstaller. Le service -> gestionnaire de service win ;) . Mais effec je voulai permetre a l'utilisateur d'entrez un temps avant l'installation du service. Je ne cherche pas à dialoguer avec lui après car, le but est justement qu'il fasse tout automatiquement. Je ne sais si tu ma compris lol ;).
Merci de tes conseils, je vai voir tout ça :D
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 12 nov. 2006 à 13:25
pas d'accord ... FileZilla server démarre en service, et si tu veux l'administrer , tu lances l'interface graphique ... et tu la fermes quand tu n'en as plus besoin
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 12 nov. 2006 à 10:18
Arnaud16022 >> Pour un service qui demanderait l'intervention de l'utilisateur, on n'a que deux choix. L'icone dans le systray ou une combinaison de touches du clavier. Cette dernière solution nécessite un hook. Beaucoup de logiciels utilisent les deux solutions. Cela permet par exemple d'afficher la boite de dialogue de paramétrage. Il est vrai que ce n'est pas bien de trop charger le systray mais parfois on ne peut pas faire autrement.
Arnaud16022
Messages postés1329Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention16 juin 20102 11 nov. 2006 à 18:19
petite idée comme ça : désactiver la coupure quand fullscreen.
l'inactivité, c'est souris, clavier ou les 2 ? et les joysticks ? ou alors tu utilises une fonction toute faite ?
RACPP -> point de vue apprentissage et programmation l'idée est bonne. cependant je suis heureux que Apache n'ai pas eu cette idée, mon systray est déjà assez blindé comme ça. Mais encore une fois c'est une bonne idée en soi ^^
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 nov. 2006 à 22:49
Merci RACPP...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 nov. 2006 à 22:48
Je pense que tu peux maintenant donner une nouvelle note.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 nov. 2006 à 22:46
Ombitious_developper >> Je vais supprimer ton 7 pour que tu puisses renoter.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 nov. 2006 à 22:33
Salut:
Vraimant, j'étais injuste avec toi 7 c'est trop peu.
Lorsque j'ai pris mon temps pour lire ton code, j'ai sû que tu mérite un 10.
Comment faire pour donner une nouvelle note?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 9 nov. 2006 à 21:43
Salut,
L'idée est très bonne.
Tu n'as pas besoin d'un autre EXE pour permettre à l'utilisateur de désactiver ou réactiver le compte à rebours. Ton service pourra interagir avec le bureau si tu ajoutes le flag SERVICE_INTERACTIVE_PROCESS comme 5e paramètre de CreateService(). Ainsi tu mettras une icone dans le systray avec un menu contextuel permettant d'activer ou désactiver la temporisation. Pas besoin de désactiver le service car une seule variable BOOL dont la valeur dépend du choix de l'utilisateur suffit pour que le service décide d'arrêter le PC ou non. Tu peux même ajouter une petite boite de dialogue permattant de choisir la durée d'attente avant extinction du PC. Ce qui aura également l'avantage de te permettre d'utiliser un Timer Windows en recevant WM_TIMER dans la procédure de la boite de dialogue.
Ce ne sont que des suggestions. A toi de voir.
Bonne continuation.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 nov. 2006 à 20:05
Salut:
7/10 ça me parait bien mérité
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 9 nov. 2006 à 20:04
Salut:
Voilà enfin une source claire, courte et efficace pour apprendre à créer un service Windows.
10 juin 2008 à 09:40
Votre programme est vraiment très intéressant . Je voulais le testé mais hélas, quand je télécharge le .zip, il n'y a pas les fichiers .exe dedans ... Est ce que c'est normale ? je suis un nouveau sur le site. Dois-je le compiler moi même ?
Merci d'avance à ce qui peuvent me répondre.
21 nov. 2006 à 11:16
15 nov. 2006 à 15:31
13 nov. 2006 à 19:33
13 nov. 2006 à 19:24
13 nov. 2006 à 19:19
13 nov. 2006 à 19:13
13 nov. 2006 à 18:33
13 nov. 2006 à 17:30
13 nov. 2006 à 17:14
13 nov. 2006 à 14:04
Arnaud16022 >> Moi je parle d'un service autonome à 100%, c'est à dire sans application externe. Dans l'exemple de FileZilla il parait que le service n'est qu'un élément de l'application. Le serveur étant le seul élément ayant besoin d'être lancé comme service. Il est en effet primordial de ne pas trop charger un service donc de le limiter au strict minimum. Dans les cas comme ce code source, on peut ajouter l'icone du systray, le menu contextuel et la boite de dialogue de paramétrage. Ca ne pose aucun problème.
Deck_Bsd >> Pour installer ou désinstaller le service, un autre exe est nécessaire pour éviter l'installation manuelle. Ton service peut démarrer avec une valeur par défaut inscrite dans la base de registres. Cette valeur sera ensuite modifiable par l'utilisateur autant de fois qu'il le désire. Pendant le fonctionnement du service, cette valeur sera contenu dans une simple variable.
13 nov. 2006 à 08:43
while(*c != '\\')c--;
*++c = 0;
lstrcat(szServPath,"SHUTD.exe");
sa serais pas plutôt
lstrcat(szServPath, c); ?
Parce que la si on change le nom de l'exe c'est foutu.
Une petite idée sa pourrai être de mettre des paramètre dans InstallService(), sa rend les fonctions plus modulaire et nous permet de réutiliser la fonction dans nos programmes ^^
Sinon c'est intéréssant, bonne source 7/10
12 nov. 2006 à 17:23
Merci de tes conseils, je vai voir tout ça :D
12 nov. 2006 à 13:25
12 nov. 2006 à 10:18
11 nov. 2006 à 18:19
l'inactivité, c'est souris, clavier ou les 2 ? et les joysticks ? ou alors tu utilises une fonction toute faite ?
RACPP -> point de vue apprentissage et programmation l'idée est bonne. cependant je suis heureux que Apache n'ai pas eu cette idée, mon systray est déjà assez blindé comme ça. Mais encore une fois c'est une bonne idée en soi ^^
9 nov. 2006 à 22:49
9 nov. 2006 à 22:48
9 nov. 2006 à 22:46
9 nov. 2006 à 22:33
Vraimant, j'étais injuste avec toi 7 c'est trop peu.
Lorsque j'ai pris mon temps pour lire ton code, j'ai sû que tu mérite un 10.
Comment faire pour donner une nouvelle note?
9 nov. 2006 à 21:43
L'idée est très bonne.
Tu n'as pas besoin d'un autre EXE pour permettre à l'utilisateur de désactiver ou réactiver le compte à rebours. Ton service pourra interagir avec le bureau si tu ajoutes le flag SERVICE_INTERACTIVE_PROCESS comme 5e paramètre de CreateService(). Ainsi tu mettras une icone dans le systray avec un menu contextuel permettant d'activer ou désactiver la temporisation. Pas besoin de désactiver le service car une seule variable BOOL dont la valeur dépend du choix de l'utilisateur suffit pour que le service décide d'arrêter le PC ou non. Tu peux même ajouter une petite boite de dialogue permattant de choisir la durée d'attente avant extinction du PC. Ce qui aura également l'avantage de te permettre d'utiliser un Timer Windows en recevant WM_TIMER dans la procédure de la boite de dialogue.
Ce ne sont que des suggestions. A toi de voir.
Bonne continuation.
9 nov. 2006 à 20:05
7/10 ça me parait bien mérité
9 nov. 2006 à 20:04
Voilà enfin une source claire, courte et efficace pour apprendre à créer un service Windows.
Merci ça me servira de petite lesson ...