PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Services Windows s'arrète automatiquement
Services Windows s'arrète automatiquement
Iniciado por Mathurin PARKOUDA, 05,nov. 2019 13:58 - 3 respuestas
Miembro registrado
2 mensajes
Publicado el 05,noviembre 2019 - 13:58
Bonjour Chers développeurs
J'ai conçu un service qui permet d'imprimer un bon automatiquement dès qu'un nouveau enregistrement est fait. Quant je l’exécute ça me donne le résultât auquel je m'attend. Mais quand je l'installe et que je vais dans le services windows pour le démarrer, voici le message que ça m'affiche:
"***Le service PROJET_IMPRESSION_BON sur ordinateur local a démarré et s'est ensuite arrêté. Certains services s'arrêtent automatiquement s'ils ne sont pas utilisés par d'autres services ou programmes****"



Merci de l'aide
Voici mon code ci-dessous:
// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
// IMPRIME_BON ()
//
// Paramètres :
// Aucun
// Valeur de retour :
// Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
PROCÉDURE IMPRIME_BON()
//trouver les ventes non imprimées
//nVarOdreComde est un entier

HExécuteRequête(REQ_SELECT_VTE_NON_IMPRIM,hRequêteDéfaut)
HLitPremier(REQ_SELECT_VTE_NON_IMPRIM)
SI HTrouve(REQ_SELECT_VTE_NON_IMPRIM) ALORS
TANTQUE PAS HEnDehors(REQ_SELECT_VTE_NON_IMPRIM)

HExécuteRequête(REQ_SELECT_ORDRE_CMDE,hRequêteDéfaut,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl)
HLitPremier(REQ_SELECT_ORDRE_CMDE)
SI HTrouve(REQ_SELECT_ORDRE_CMDE) ALORS
//Bon de commande pour la section concernéd
POUR k=1 _À_ gnVarNbreFoisImprimeTickeINI
iInitRequêteEtat(ETAT_RECU_PAR_SECTION,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl,REQ_SELECT_ORDRE_CMDE.Serie_DBL,gnVarNumSection)
iImprimeEtat(ETAT_RECU_PAR_SECTION)
FIN
HLitSuivant(REQ_SELECT_ORDRE_CMDE)
TANTQUE PAS HEnDehors(REQ_SELECT_ORDRE_CMDE)
SI VarSectionImprimableINI=1 ALORS
POUR k=1 _À_ gnVarNbreFoisImprimeTickeINI
iInitRequêteEtat(ETAT_RECU_PAR_SECTION,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl,REQ_SELECT_ORDRE_CMDE.Serie_DBL,gnVarNumSection)
iImprimeEtat(ETAT_RECU_PAR_SECTION)
FIN
FIN
//Impression note du client
iInitRequêteEtat(ETAT_RECU_PAR_SECTION_CLI,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl,REQ_SELECT_ORDRE_CMDE.Serie_DBL)
iImprimeEtat(ETAT_RECU_PAR_SECTION_CLI)

//Marquage ligne facture pour imprimle
HExécuteRequête(REQ_MARQUE_IMPRIM_LIGNE_FACT,hRequêteDéfaut,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl)

HLitSuivant(REQ_SELECT_ORDRE_CMDE)
FIN
FIN
//Marquage facture pour imprime
HExécuteRequête(REQ_MARQUE_FACTURE_IMPRIM,hRequêteDéfaut,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl)

HLitSuivant(REQ_SELECT_VTE_NON_IMPRIM)

FIN
//sinon
//
FIN
Miembro registrado
2.321 mensajes
Publicado el 05,noviembre 2019 - 15:48
Bonjour,

Je dirais que le problème ne vient pas de votre code mais de :
1. la façon dont le service est installé, en particulier des droits affectés.
2. du code d'initialisation du service que retourne une erreur que vous n'avez pas programmée (connexion à la BdD HF en particulier).

--
Bon dev,
Jean-Pierre
Miembro registrado
2 mensajes
Publicado el 05,noviembre 2019 - 16:22
Bonjour, merci pour l'aide
Je ne m'y connait pas en projet Service Windows, c'est une première pour moi.
Voici mon code d'initialisation : un code que j'ai juste copié dans le projet windows principale et qui marche:
//**********Code d'initialisation du projet****************
gnVarNbreFoisImprimeTickeINI est un entier
gnVarNumSection est une chaîne
VarSectionImprimableINI est un booléen

gsVarMotPasseConnexion est une chaîne
gsVarMotParsseConnexDecrypt est une chaîne
VarTesConn est un booléen
gsVarNomOrga est une chaîne="TITIS"

//Lecture du fichier ini
MaConnexion..Provider=hAccèsHFClientServeur
MaConnexion..Serveur=RegistreLit("HKEY_CURRENT_USER\SOFTWARE\iSOFT\iCOM_HF","SERVEUR")
MaConnexion..BaseDeDonnées=RegistreLit("HKEY_CURRENT_USER\SOFTWARE\iSOFT\iCOM_HF","BD")
MaConnexion..Utilisateur=RegistreLit("HKEY_CURRENT_USER\SOFTWARE\iSOFT\iCOM_HF","USER")

gsVarMotPasseConnexion=RegistreLit("HKEY_CURRENT_USER\SOFTWARE\iSOFT\iCOM_HF","PASSWORD")
gsVarMotParsseConnexDecrypt =Décrypte(gsVarMotPasseConnexion,"password")
MaConnexion..MotDePasse=gsVarMotParsseConnexDecrypt
VarTesConn=HOuvreConnexion(MaConnexion)

****///// CODE D'EXECUTION EN BOUCLE DU SERVICE******************
IMPRIME_BON()
ServiceTemporise(200)


*********///// CODE de la Procedure IMPRIME_BON() précedemment évoqué
Procedure IMPRIME_BON()
//trouver les ventes non imprimées
//nVarOdreComde est un entier

HExécuteRequête(REQ_SELECT_VTE_NON_IMPRIM,hRequêteDéfaut)
HLitPremier(REQ_SELECT_VTE_NON_IMPRIM)
SI HTrouve(REQ_SELECT_VTE_NON_IMPRIM) ALORS
TANTQUE PAS HEnDehors(REQ_SELECT_VTE_NON_IMPRIM)

HExécuteRequête(REQ_SELECT_ORDRE_CMDE,hRequêteDéfaut,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl)
HLitPremier(REQ_SELECT_ORDRE_CMDE)
SI HTrouve(REQ_SELECT_ORDRE_CMDE) ALORS
//Bon de commande pour la section concernéd
POUR k=1 _À_ gnVarNbreFoisImprimeTickeINI
iInitRequêteEtat(ETAT_RECU_PAR_SECTION,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl,REQ_SELECT_ORDRE_CMDE.Serie_DBL,gnVarNumSection)
iImprimeEtat(ETAT_RECU_PAR_SECTION)
FIN
HLitSuivant(REQ_SELECT_ORDRE_CMDE)
TANTQUE PAS HEnDehors(REQ_SELECT_ORDRE_CMDE)
SI VarSectionImprimableINI=1 ALORS
POUR k=1 _À_ gnVarNbreFoisImprimeTickeINI
iInitRequêteEtat(ETAT_RECU_PAR_SECTION,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl,REQ_SELECT_ORDRE_CMDE.Serie_DBL,gnVarNumSection)
iImprimeEtat(ETAT_RECU_PAR_SECTION)
FIN
FIN
//Impression note du client
iInitRequêteEtat(ETAT_RECU_PAR_SECTION_CLI,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl,REQ_SELECT_ORDRE_CMDE.Serie_DBL)
iImprimeEtat(ETAT_RECU_PAR_SECTION_CLI)

//Marquage ligne facture pour imprimle
HExécuteRequête(REQ_MARQUE_IMPRIM_LIGNE_FACT,hRequêteDéfaut,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl)

HLitSuivant(REQ_SELECT_ORDRE_CMDE)
FIN
FIN
//Marquage facture pour imprime
HExécuteRequête(REQ_MARQUE_FACTURE_IMPRIM,hRequêteDéfaut,REQ_SELECT_VTE_NON_IMPRIM.Num_Bl)

HLitSuivant(REQ_SELECT_VTE_NON_IMPRIM)

FIN
//sinon
//
FIN
Publicado el 07,noviembre 2019 - 10:46
Bonjour,

Je ne vais pas résoudre le problème, mais voici quelques conseils :

Ne pas se connecter à la BDD dans l'initialisation du projet. Faire la connexion au lancement de la procédure, et fermer la connexion à la fin. et bien sûr, ne pas lancer l'impression si la connexion échoue. (Sinon, vous laissez une connexion permanente à la BDD, ce qui peut empêcher par exemple, la mise à jour de la structure de la bdd).

A titre perso, pour tout ce qui est dans un service, je mets ça avec un traitement d'exception. (Quand exception dans...faire...fin). Et pour toute exception, je m'envoie une alerte de l'exception. Un service ne supporte aucun plantage!

Il faut aussi tester les résultat des requêtes avant d'enclencher les lectures.
Si hexecuterequete(…)=vrai alors