[C/WIN32] SERVICE WIN, ÉTEINT LE PC APRÈS 1H D'INACTIVITÉ.

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 9 nov. 2006 à 20:04
cs_Masterminh Messages postés 1 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 10 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.

https://codes-sources.commentcamarche.net/source/40258-c-win32-service-win-eteint-le-pc-apres-1h-d-inactivite

cs_Masterminh Messages postés 1 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 10 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és 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 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és 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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és 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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és 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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és 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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és 118 Date d'inscription mercredi 22 octobre 2003 Statut Membre Derniè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és 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
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és 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
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és 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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és 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
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és 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 nov. 2006 à 22:49
Merci RACPP...
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 nov. 2006 à 22:48
Je pense que tu peux maintenant donner une nouvelle note.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 nov. 2006 à 22:46
Ombitious_developper >> Je vais supprimer ton 7 pour que tu puisses renoter.
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
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és 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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és 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 nov. 2006 à 20:05
Salut:

7/10 ça me parait bien mérité
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
9 nov. 2006 à 20:04
Salut:

Voilà enfin une source claire, courte et efficace pour apprendre à créer un service Windows.

Merci ça me servira de petite lesson ...
Rejoignez-nous