Page 1 sur 1

[R] Création de Service et GUI

Posté : ven. 22 oct. 2010 14:46
par totof74
Bonjour,

Voici mon problème.
J'ai développé un script autoit qui effectue la fonction suivante :
-> il interroge un service sur un serveur qui récupère des informations sur des imprimantes industrielles (ex : nombre d'étiquettes imprimées),
-> je fait appel à un timer pour interroger le service périodiquement,
-> à réception de ces données, il les stockent dans une base SQL Server Lite en utilisant l'authentification NT pour l'accès à la base,
-> il utilise une interface graphique qui s'ouvre "cachée" avec une icône dans la traybar. Un clic sur l'option "show" de la traybar permet de montrer l'interface graphique (c'est une simple fenêtre avec les logs de l'application).

Le script fonctionne correctement.

Cependant, j'ai voulu transformer ce script en service pour qu'il tourne en automatique sur une machine.
J'ai utilisé pour cela l'include "services.au3" version "3.2.10++" créé par "Engine, Arcker, Shminkyboy et udgeen".

J'ai inclus mon code entre les lignes :

Code : Tout sélectionner

Func _Svc_Main()
    main_init()
    logPrint("main start")
    logPrint("main loop. evnt=" & _WinAPI_WaitForSingleObject($service_stop_event, 0))
    While $gServiceStateRunning
        _principal() ;<============= APPEL DE MON CODE
    WEnd
    logPrint("main outer. evnt=" & _WinAPI_WaitForSingleObject($service_stop_event, 0))
    _Service_Cleanup()
    logPrint("main stopped.")
EndFunc   ;==>main
Une fois compilé je suis à même de lancer la commande "monprogramme /i" pour l'installer en tant que service : ça marche.
Quand je démarre le service créé, le service se lance correctement mais plus rien ne se passe ! (
La base de donnée ne se remplie pas. Visiblement la connection au server sql ne fonctionne plus.

J'ai exécuté le service avec "interact with desktop" -> le programme se lance mais plante ensuite à cause de droits d'accès à la base sql.
J'ai exécuté le service avec des droits spécifiques (qui a les droits pour accèder à la base). Le programme ne plante plus, mais du coup : l'icone n'apparait plus dans la traybar et ça ne marche pas mieux.

Qu'en pensez vous ?
-> Cela vient-il du fait que mon programme utilise un timer et que l'include "services.au3" utilise aussi un timer ?
-> Problème de droit ?
-> Problème d'implémentation de mon code ?

Merci de votre aide !

Re: [..] Création de Service et GUI

Posté : ven. 22 oct. 2010 17:03
par totof74
J'ai avancé un peu sur mon problème :

Je penche pour un problème de Timer, en mettant des logs partout, je vois que la majorité de mon code à l'air fonctionner, mais le timer ne se déclenche pas. Pourtant ça marche quand le programme n'est pas mis en tant que service...

Afin d'essayer de résoudre le problème, j'ai utilisé ce code pour créer une gui séparée pour le timer, mais ça ne change rien :

Code : Tout sélectionner

#Include <Timers.au3>
Local $hTimerGUI = GuiCreate("timer")
$hTimer1= _Timer_SetTimer($hTimerGUI, 1000, "_Timer1_CallBack")
 
Comprend pas....

Re: [..] Création de Service et GUI

Posté : ven. 22 oct. 2010 20:52
par Tlem
En mode service, les droits ne sont pas forcément identiques.
De plus, si la session est fermée, il n'y à pas de GUI.

Re: [..] Création de Service et GUI

Posté : lun. 25 oct. 2010 09:31
par totof74
Salut, merci pour ta réponse,

J'ai testé avec des droits différents. Avec un compte de domaine qui est admin local de la machine et qui a les droits sur la base. Ca ne change rien.

Le problème, c'est que pour créer un timer, apparement, il faut le définir sur le handle d'une GUI. Si je n'ai pas de GUI en tant que service puisque pas de session ouverte, comment faire pour créer un timer ? C'est impossible ? ça me paraît étrange !

Re: [..] Création de Service et GUI

Posté : lun. 25 oct. 2010 11:11
par Jerome
Coucou,

Après une recherche rapide sur le forum, tu aurait trouvé ce post pour le timer.





Jérôme

Re: [..] Création de Service et GUI

Posté : lun. 25 oct. 2010 12:00
par totof74
Bonjour Jerome,

Ton inférence selon laquelle je n'ai pas effectué de recherche préalable est infondée.

J'avais connaissance de cette fonction, mais je ne l'ai pas sélectionnée, parce que (l'ayant sans doute mal comprise) elle ne m'avait pas parue correspondre à mon besoin. En fait, compte tenu de son implémentation, elle me semblait (peut-être à tord) plus consommatrice de CPU que l'autre.
Cela dit, si je n'ai pas de solution, je vais me pencher dessus à nouveau.
Merci donc pour cette piste.

Re: [R] Création de Service et GUI

Posté : mar. 26 oct. 2010 12:25
par totof74
Bon je m'en suis sorti avec le timer "de base" TimerDiff. Le code est moins propre, mais bon, ça fonctionne et ça n'a pas l'air d'être trop consommateur de CPU.

J'ai viré toutes les GUI du coup, j'ai juste gardé un fichier de log.

Merci Jérôme !