PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Etat exécuté depuis un service
Etat exécuté depuis un service
Iniciado por damien.defeux, 05,feb. 2020 12:05 - 4 respuestas
Publicado el 05,febrero 2020 - 12:05
Bonjour,

J'ai un service Windows qui imprime un état.

La lecture des données se fait par programmation :

OUVERTURE de MonEtat :

HLitPremier(Fic_Data)

var_nbr est un numérique = HNbEnr(Fic_Data)


Lecture des Données de MonEtat :

SI HEnDehors() ALORS
// Arrêt de l'impression du bloc Corps
RENVOYER Faux
SINON
// Impression du bloc Corps et exécution de ses traitements
RENVOYER Vrai
FIN

Avant impression de CORPS :

Rub_Code=Fic_Data.Code

Après impression de CORPS :

HLitSuivant(Fic_Data)



Lorsque j’exécute le code en faisant un exe windev ça fonctionne, mais en service (sur le même compte utilisateur) ça ne fonctionne pas. Le programme ne va pas dans la procédure lecture des données, il sort après la procédure "ouverture de MonEtat".

var_nbr est > 0

Savez-vous ce qui se passe entre la fin de : "ouverture de MonEtat" et "Lecture des données de MonEtat" ?

Merci d'avance.
Miembro registrado
139 mensajes
Publicado el 05,febrero 2020 - 14:08
Dans le code d'ouverture de l'état, lorsqu'exécuté en tant que service, il faudrait tester si le HLitPremier() fonctionne bien (fichier vide, absence de fichier, autre....)
Je pressent un problème de chemin d'accès aux données / connexion à la BDD si en HFSQL. qui ne serait pas identique entre le service et l'exe.
Publicado el 05,febrero 2020 - 15:53
Oui le HLitPremier fonctionne, en mettant un Fic_Data.Code_Article juste après, j'ai bien le code qui est renvoyé.

Par contre, il ne passe pas dans lecture des données, il sort de l'état avant, mais pourquoi et malheureusement pas de message d'erreur.

Je dirai que c'est soit un problème de droits, mais je suis en administrateur en connexion et pour le compte du service. Tout est en local, j'ai mis les droits maximum sur l'imprimante. Soit un problème entre l'état et l'imprimante, mauvaise configuration, un rejet par l'imprimante (marges, options...) Mais malheureusement pas de message d'erreur.
Publicado el 10,febrero 2020 - 10:38
Nouvelles informations :

J'ai remplacé l’accès à la base de données par une variable et c'est pareil.

La première fois le programme passe dans ouverture de MonEtat, mais ne passe pas dans Lecture des données de MonEtat et il n'exécute pas la fin du programme, il semble "sauter" la procédure qui a appelé l'état. Dans la boucle suivant, la fonction iImprimeEtat n'ouvre pas l'état mais ne provoque pas d'erreur et le programme continu.

Par contre, lors de la première boucle, il y a la création d’un message dans l'observateur d’événements Windows :

Crash PCS EXE
Non disponible
C:\Temp\CXE3C27.tmp.txt
736864d9-4be1-11ea-a8ca-b083fe917997


Voici le contenu du fichier C:\Temp\CXE3C27.tmp.txt :


Que s'est-il passé ?
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous exécutez les mêmes manipulations, il est conseillé de transmettre au Support Technique Gratuit :
- une description des circonstances de l'incident
- les lignes de code, une fenêtre ou un projet permettant de reproduire le problème
- les informations techniques suivantes

Details techniques :

Module : wd230prn.dll
Version du module : 23.0.136.0
VI : 01F230053k
Adresse de base : 668E0000
Erreur systeme : Access violation (GPF)
EIP = 66950B4B
OS : Windows 2008 R2 Service Pack 1(6.1.7601)

Code erreur : 1020
Niveau : erreur fatale

Dump de l'erreur du module 'wd230vm.dll' (23.0.370.1).
Identifiant des informations détaillées (.err) : 1020
Informations de débogage :

Details techniques :

Module : wd230prn.dll
Version du module :
Miembro registrado
4.362 mensajes
Publicado el 10,febrero 2020 - 11:31
Bonjour,
Les services ont des droits limités. Entre autres, je suis quasiment convaincu que cela inclus l'impression. Il doit y avoir un conflit avec le spooler d'impression.
Pour résoudre le problème, ton service doit envoyer son résultat au spooler. https://docs.microsoft.com/en-us/windows/win32/printdocs/print-spooler-api

--
Il y a peut être plus simple, mais, ça tourne