1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

WD Lancement d'un service windows

Discussion dans 'Windev' créé par faq, Mar 17, 2022.

  1. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Bonjour à tous.

    J'ai développé un service Windows qui se boucle toutes les 60 minutes.
    Cet EXE doit s'exécuter tout au long de démarrage de Windows.
    Le rôle de ce service est de se connecter à la base de données C/S HFSQL pour lancer automatiquement l'impression.
    J'installe donc ce service dans le poste serveur.
    Le problème est que le service ne tourne plus (l'impression ne démarre plus)
    Cependant, ce dernier se trouve dans le gestionnaire de tâches.
    Je vérifie dans les services d'application Windows :
    Type de démarrage = "Automatique"
    Etat = "En cours d'exécution" et parfois "Arrêté" n'est pas stable
    Si je lance ce service, en cliquant sur "Service déboguer", depuis la poste de développement cela fonctionne parfaitement.
    Que dois-je faire ?
    Merci d'avance
     
    Tags:
  2. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    salut
    regarde si t'as des infos dans l'observateur d' événements de windows.
    si tu n'en as pas, tu peux en créer dans ton service, pour avoir plus d'infos
    j'ai fait un gestionnaire d'impression qui fait la même chose, il fonctionne sans problème des mois entiers.
     
  3. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Merci commun

    j'ai déjà crée un fichier trace.txt, mais le problème mon service ne se lance pas (automatique)
    je cherche le fichier dans mon pc mais introuvable
     
  4. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    met des "ServiceEcritEvénementJournal" dans ton service, tu pourras suivre ton service dans l'observateur, ainsi, tu pourras peut être déterminer ce qui ne se fait pas
    et comment te connectes tu a la base de données ?
     
  5. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Dans l'évènement Exécution du service (appelé en boucle), j'ai mis le code suivant
    [windev]
    TraceDébut(trFichier, "C:\Temp\Fiche.txt")

    Rep is boolean =ServiceDémarre("ServicePrint")

    Res is int = ServiceAttendEtat("ServicePrint", serviceEtatDémarré, 10)
    SI Res = -1 ALORS
    Erreur(ErreurInfo())
    SINON
    Info("Etat en fin de timeout : " + Res)
    FIN

    SI Rep=Faux ALORS Trace("Erreur "+ErreurInfo())

    iConfigure(IniMyParam.ImprimanteReseau)
    iImprimeEtat("EtatBC", REQ_ImpressionAuto.IDFDocs, 0)

    ServiceTemporise(6000)

    CAS EXCEPTION:

    // En cas d'exception, ajoute une erreur dans le journal des événements
    ServiceEcritEvénementJournal(ExceptionInfo, ejErreur)

    // Arrête le service
    FinService(fsDéfaillance)
    [/windev]


    Je lance un test mais rien ne passe (Aucune impression)
    Je lis mon fichier "Fiche.txt" dans lequel j'ai le message ci dessous
    Le service ServicePrint n'existe pas ou vous ne disposez pas de droits suffisants pour effectuer l'opération.
    Détail de l'erreur système : Accès refusé.
     
  6. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Maintenant j'ai résolu le problème en évitant l'affichage d'une fenêtre (Un service ne doit pas afficher de fenêtre)
    Mais toujours pas d'impression (pas d'execution)
    Après une recherche dans le service windows je trouve que le service est en état Arrêt, je le redémarre
    J'ai le message
    Windows n'a pas pu démarrer le service ServicePrint sur Ordinateur local.
    Erreur 1067 : Le processus s'est arrêté inopinément.
     
  7. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    tu demarres ton servce dans la boucle?
    le service doit etre demarré a l'init du service pas dans la boucle, peut etre que ton probleme vient de la,
    de plus, tu ne devrais pas mettre la config de ton imprimante dans la boucle mais dans une fonction appelée quand besoin.

    mais je pense que ton erreur de base, vient du fait que tu lances et relances le service.
    en fait en relisant ton code, je te vois demarrer ton service, puis tester son etat, puis configurer l'imprimante, puis imprimer l'etat sur la requete que tu n'as pas executé

    ce que je ferais
    je lancerais l'etat dans l'init
    dans la boucle:
    je lancerais la requete
    si la requete a des elements, je lancerais une procedure qui imprime l'etat basé sur la requete

    puis hannule la requete et retour a la boucle
    fin de la boucle ( hors tests et tempo).

    je dis ca, j'ai fait un seul service selon mes besoins, et c'est a peu près le principe que j'ai mis en place. il imprime dans une boite de 30 personnes et teste 3 fois par seconde une table si elle a des enregistrements et agit s'il y en a. mais ne fait rien d'autre sinon. et ca fonctionne sans problème.
    voici ma boucle

    [windev]// Exécution du service
    impr()

    ServiceTemporise(300 ms)

    CAS EXCEPTION:

    // En cas d'exception, ajoute une erreur dans le journal des événements
    ServiceEcritEvénementJournal(ExceptionInfo, ejErreur)

    // Arrête le service
    FinService(fsDéfaillance)[/windev]

    la fonction impr, verifie si des enregistrements existent,
    [windev]SI HNbEnr(impressions)>0 ALORS[/windev]
    si oui, lance une impression par ligne et supprime la ligne
    sinon, revient.
     
  8. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Merci pour ton retour

    Tout est fonctionne bien :
    Le service est toujours en cours d'exécution
    la procédure d'impression est bien s'exécute
    Sauf que l'impression ne se lance pas

    J'ai démarre mon service dans l'initialisation
    J'ai exécuté la fonction iConfigure("Nom de l'imprimante") dans l'initialisation

    Dans Exécution du service (appelé en boucle)
    Impression()
    ServiceTemporise(3000)
    CAS EXCEPTION:
    ServiceEcritEvénementJournal(ExceptionInfo, ejErreur)
    FinService(fsDéfaillance)

    Ma procédure Impression()
    POUR TOUT MonFichier
    SI MonFichier.Imprime=0 alors
    iImprimeEtat("EtatBC", MonFichier.ID)
    MonFichier.Imprime=1
    SI PAS HModifie() ALORS
    Trace(" Pas de modification "+HErreurInfo(hErrComplet))
    FIN
    FIN
    Fin
    La rubrique "Imprime" prend la valeur 1 mais l'impression ne passe pas !!!!
    je ne sais pas exactement quel est le problème ?

    A noter
    L'imprimante est en réseau local ou distant
    J'installe, uniquement mon service dans le serveur
    l'imprimante est installé dans un pc dans le réseau
     
    #8 faq, Mar 25, 2022
    Dernière édition: Mar 25, 2022
  9. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    si l'imprimante est reseau installe la sur le serveur ca sera mieux.
    j'utiliserais iconfigure juste avant l'impression a ta place. pas dans l'init, surtout si l'imprimante est pas parametree sur le serveur
    Moi, j'utilise plusieurs imprimantes et je change d'imprimante à la volée juste avant l'impression, ca me permet d'imprimer sur l'imprimante utile en temps reel selon le poste qui lance l'impression.
    j'imprime principalement des tickets de caisse sur 4 imprimantes différentes a partir d'une dizaine de caisses, chaque caisse est configurée avec une imprimante et envoie le nom de l'imprimante voulue en même temps que la demande d'impression, facile a gerer.
    par contre, je pige pas un truc, combien d'enregistrements contient "monfichier"?
     
  10. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    C'est bon
    Lors j'installe l'imprimante directement dans le serveur ca marche

    Mais je veux que l'imprimante soit en réseau, déjà elle a une adresse IP et elle est sous réseau

    >> Tu dis : pas dans l'init, surtout si l'imprimante est pas parametree sur le serveur

    Mais est ce que tu met iconfig() dans la boucle de service dans ta procedure imp()
     
    #10 faq, Mar 28, 2022
    Dernière édition: Mar 28, 2022
  11. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    mais l'imprimante est en réseau, elle doit etre installée (configurée) sur le serveur ( pas physiquement) pour pouvoir l'utiliser facilement.
    si tu n'as qu'une imprimante configurée sur ton serveur, aucun besoin de la configurer a chaque impression, donc tu n'as pas besoin de iconfigure, tu n'en as besoin que pour changer d'imprimante selon ton besoin ( comme mon cas).
    tu n'as pas répondu a la question "combien d'enregistrement..."
     
  12. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Le fichier contient actuellement 38015 lignes
     
  13. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    ha
    tu veut dire qu'a chaque tour tu scannes tout tes enregistrements?
    enorme perte de temps et ressources
    fait une requete et imprime a partir de ta requete
    peu de changements a faire et bien plus efficace
     
  14. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Bien sur j'utilise une requête paramétrée sur la rubrique "EstImprime=0"
    ma requête trouve une seule ligne ayant EstImprime=0
    Donc la taille ne pose plus de souci

    Mon problème est l'impression sous une imprimante de type réseau installé dans un autre pc
    Par contre l'imprimante en local (USB) installé directement dans un serveur ca marche
     
  15. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    ok, d'apres le code que tu as donné, j'ai cru que tu passais tout les enregistrements de ton fichier a chaque fois.
     
  16. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    si ton imprimante reseau est parametree sur ton serveur, si elle est par defaut, rien a faire.
    si elle est pas par defaut, il faut utiliser iconfigure pour imprimer, c'est tout simple
     
  17. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    "si ton imprimante reseau est parametree sur ton serveur,"
    Comment configurer l'imprimante sur le serveur ????
    J'ai déjà utilisé la fonction iconfigure()

    J'explique
    Premièrement, je ne peux pas connecter l'imprimante directement au serveur (car le serveur est dans une zone protégée, ...)
    L'imprimante est installée sur un ordinateur de bureau, et ce dernier est déjà en réseau avec le serveur.
    L'imprimante est de type réseau et possède une adresse IP de marque Canon "KMBT5E9FB3" .
    Structure de l'entreprise:
    Au siège (Direction) il y a un serveur, 5 ordinateurs de bureau, L'imprimante canon et d'autres imprimantes.Il y a 5 agences de point de vente à distance (Site).
    Chaque site génère une fiche de production afin de l'imprimer automatiquement dans l'imprimante Canon.
    Le rôle de service imprime les fiches qui n'ont pas encore été imprimés

    [windev]
    REQ.ParamEstImprime=0
    REQ.ExécuteRequête(hRequêteDéfaut)
    POUR TOUT REQ

    iImprimeEtat("EtatBC", REQ.IDFDocs)

    SI HLitRecherchePremier(FDocs,IDFDocs, REQ.IDFDocs, hIdentique)=Vrai ALORS
    FDocs.EstImprime=Vrai
    SI PAS HModifie() ALORS
    Trace(" Pas de modification "+HErreurInfo(hErrComplet))
    FIN
    FIN

    FIN
    HLibère(REQ)
    [/windev]
    Donc si l'impression ne réussit pas, la rubrique "EstImprime" ne prendra pas la valeur 1
    Mon service
    Il est bien démarré
    Il s'exécute automatiquement

    Mon problème peut être le chemin de l'imprimante
    Je suis bloqué merci de me donner encore des pistes
     
  18. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    si l'imprimante est connectée au serveur ( en usb) ça fonctionne, si juste sur le réseau ça ne fonctionne pas?

    ---Comment configurer l'imprimante sur le serveur ????
    il faut que tu installes sur ton serveur une nouvelle imprimante réseau avec le chemin réseau de ta canon et la mettre comme imprimante par defaut, sur ce même serveur, si tu peux, sinon utiliser iconfigure pour la changer en temps réel

    pour ta partie mise a jour pourquoi ne pas faire une requête?
    [windev]
    update fdocs
    set EstImprime=1
    where
    IDFDocs=REQ.IDFDocs
    [/windev]

    Ca t’évite de relire ton fichier
     
  19. faq

    faq Active Member

    Inscrit:
    Fev 13, 2019
    Messages:
    416
    J'aime reçus:
    35
    Oui l'imprimante fonctionne en USB
    L'imprimante est déjà configurée et elle est par défaut
    Quel est la relation entre ce code windev et le non fonctionnement de l'imprimante ?
     
  20. commun

    commun Active Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    227
    J'aime reçus:
    111
    si tu imprimes un truc a partir du serveur, l'impression se fait ?
    tu as regardé dans l'observateur d'evenements si tu as un message d'erreur?
     

Partager cette page

Chargement...