[R] Création de Service et GUI

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
totof74
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 22 oct. 2010 11:29
Status : Hors ligne

[R] Création de Service et GUI

#1

Message 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 !
Modifié en dernier par totof74 le mar. 26 oct. 2010 12:25, modifié 1 fois.
totof74
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 22 oct. 2010 11:29
Status : Hors ligne

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

#2

Message 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....
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#3

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
totof74
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 22 oct. 2010 11:29
Status : Hors ligne

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

#4

Message 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 !
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

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

#5

Message par Jerome »

Coucou,

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





Jérôme
totof74
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 22 oct. 2010 11:29
Status : Hors ligne

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

#6

Message 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.
totof74
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 22 oct. 2010 11:29
Status : Hors ligne

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

#7

Message 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 !
Répondre