Page 1 sur 1
[R] Erreur au démarrage de mon service Autoit
Posté : mar. 05 janv. 2010 10:25
par Dexxpo
Bonjour et bonne année
J'ai pour projet de créer un script permettant de recevoir des trames TCP, donc pour cela j'ai fait un client en autoit et qui doit être lancé en service.
Le problème c'est que j'ai une erreur (on ne la voit pas mais on l'entend) lorsque que je démarre le service...
Je pense avoir identifié la cause du problème, c'est _Service_init($s_ServiceName).
Voici le code qui permet de créer le service, j'ai utilisé la méthode suivante:
http://www.autoitscript.com/forum/index ... opic=80201
► Afficher le texte
Code : Tout sélectionner
#include "Services.au3"
Global $s_ServiceName = "VSUpdater_Client"
Global $s_ServiceDisplayName = "VSUpdater Client"
Global $s_ServiceAppPath = @ProgramFilesDir & "\VSUpdater Client\VSUpdater_Client.exe"
_Service_Create($s_ServiceName, $s_ServiceDisplayName, BitOR($SERVICE_INTERACTIVE_PROCESS,$SERVICE_WIN32_OWN_PROCESS), $SERVICE_AUTO_START,$SERVICE_ERROR_NORMAL, $s_ServiceAppPath)
Et voici le code du client:
► Afficher le texte
Code : Tout sélectionner
#include "Services.au3"
;Opt("TrayMenuMode", 1)
Global $ConnectedSocket, $MainSocket, $socket, $msg, $SendSocket, $Split[10], $file, $line[99], $i, $Fin, $IP
$socket = 65000
$s_ServiceName = "VSUpdater_Client"
If _Service_Exists($s_ServiceName) Then _Service_init($s_ServiceName)
MsgBox(0, "Service", "OK")
TCPStartUp()
TCP_Listen()
;~ Ecoute du port 65000
Func TCP_Listen()
$IP = @IPAddress1
$MainSocket = TCPListen($IP, $socket )
If $MainSocket = -1 Then
MsgBox(16, "Error Socket", "Error create socket " & $socket)
Exit
EndIf
EndFunc
;~ Attend l'appel du server
While 1
If $IP = @IPAddress1 Then
$ConnectedSocket = -1
$ConnectedSocket = TCPAccept($MainSocket)
If $ConnectedSocket >= 0 Then
while 1
;$ConnectedSocket = -1
$msg = TCPRecv($ConnectedSocket,1024)
If $msg <> "" Then $Split = StringSplit($msg, "|")
If $Split[1] = "GoUpdate" then
ChangeHostFile()
$SendSocket = TCPConnect($Split[2], 65000)
TCPSend($SendSocket,@IPAddress1 & "|In Progress")
RunWait(@ProgramFilesDir & "\McAfee\VirusScan Enterprise\mcupdate.exe /update /quiet", "", @SW_HIDE)
$SendSocket = -1
$SendSocket = TCPConnect($Split[2], 65000)
TCPSend($SendSocket, @IPAddress1 & "|Finish")
ExitLoop
EndIf
If @error then
;MsgBox(16, "Error listen", "Code error: "& @error)
ExitLoop
EndIf
wend
EndIf
Else
TCPShutdown()
TCP_Listen()
EndIf
Wend
;~ Change le fichier HOST
Func ChangeHostFile()
$file = FileOpen(@WindowsDir & "\system32\drivers\etc\hosts",0)
$i = 0
$Modif = 0
While 1
$line[$i] = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringRegExp( $line[$i], 'VSUpdater') Then
$Modif = 1
$line[$i] = "VSUpdater " & $Split[2]
EndIf
$i = $i + 1
WEnd
$Fin = $i
FileClose($file)
$file = FileOpen(@WindowsDir & "\system32\drivers\etc\hosts",2)
$i = 0
For $i = 0 to $Fin
FileWriteLine($File, $line[$i])
Next
If $Modif = 0 Then
FileWriteLine($File, "VSUpdater " & $Split[2])
EndIf
FileClose($file)
EndFunc
Si vous avez des remarques sur le reste du script je suis à l'écoute, je ne suis pas développeur donc je dois faire pas mal d'erreurs, merci de votre aide.
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mar. 05 janv. 2010 15:26
par Dexxpo
J'ai réussi à trouver la ligne exact du message d'erreur, il provient du fichier services.au3:
$ret = DllCall("advapi32.dll", "int", "StartServiceCtrlDispatcher", "ptr", DllStructGetPtr($tdispatchTable))
Et j'ai attaché le message d'erreur, je ne comprends toujours pas où je me suis trompé

Merci de votre aide

Re: [...] Erreur au démarrage de mon service Autoit
Posté : mer. 06 janv. 2010 17:47
par Dexxpo
Personne pour m'aider?

Re: [...] Erreur au démarrage de mon service Autoit
Posté : mer. 06 janv. 2010 19:35
par networe
Perso j'ai aucun message d'érreur
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mer. 06 janv. 2010 20:42
par Dexxpo
Tu as essayé avec le son? c'est comme ça que je m'en suis aperçu. Quand je démarre le service il y a a le son de l'erreur, ensuite quand on click sur l'icone en bas à droite il se passe rien et quand on arrête le service on peut voire pendant 0.5sec le message d'erreur s'afficher... mais à condition de clicquer sur l'icone en bas à bas à droite...
J'espère que nous allons trouver la solution

Re: [...] Erreur au démarrage de mon service Autoit
Posté : lun. 11 janv. 2010 13:49
par Dexxpo
personne pour m'aider?

Re: [...] Erreur au démarrage de mon service Autoit
Posté : lun. 11 janv. 2010 15:18
par Yogui
j'vais aider
Pouvez vous m'indiquer la fonction :
_Service_init()
Que vous utilisez ici
Code : Tout sélectionner
If _Service_Exists($s_ServiceName) Then _Service_init($s_ServiceName)
En effet soit je n'ai pas la bonne version de l'include sercices.au3 soit cette fonctionne n'existe pas
Re: [...] Erreur au démarrage de mon service Autoit
Posté : lun. 11 janv. 2010 15:28
par Tlem
Moi j'ai téléchargé à partir du lien donné les fichiers Services.au3 et ServicesConstants.au3 et il semble que dans le fichier il manque la fonction _Svc_Main(), d'où sûrement l'erreur 'Unknown function name' ...
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mar. 12 janv. 2010 20:20
par Dexxpo
Enfaite j'ai pris pour exemple ce script:
AServiceMenu.au3
Et lui n'utilise pas _SVC_Main() donc je ne sais pas comment l'utiliser
Merci en tout cas de m'aider !
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mar. 12 janv. 2010 21:02
par Tlem
Certes, mais si vous regardez le début du code, vous verrez que
Services.au3 est dans les Includes, donc =>
_SVC_Main() fait aussi partie de ce script.

Re: [...] Erreur au démarrage de mon service Autoit
Posté : mar. 12 janv. 2010 21:23
par Dexxpo
Pourtant je n'ai pas d'erreur avec AServiceMenu.exe...
L'UDF a été mis à jour y pas longtemps, je vais donc tester...
Je vous tiens au courant

Re: [...] Erreur au démarrage de mon service Autoit
Posté : mar. 12 janv. 2010 21:42
par Dexxpo
J'ai tenté avec le dernier UDF mais ça ne fonctionne pas.
Que faire avec _SVC_MAIN()?
Et pourquoi ça marche avec AServiceMenu?
La nuit porte coneil

Re: [...] Erreur au démarrage de mon service Autoit
Posté : mar. 12 janv. 2010 21:52
par Tlem
Si je charge
AServiceMenu.au3 dans Scite et que je fait CTRL+F5, je vois cette erreur :
Code : Tout sélectionner
C:\Services.au3(2224,12) : ERROR: _Svc_Main(): undefined function.
_Svc_Main()
~~~~~~~~~~^
C:\AServiceMenu.au3 - 1 error(s), 0 warning(s)
C'est donc bien qu'il manque cette fonction quelque part. Mettez un message à la suite du forum Anglais pour signaler le problème.
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mer. 13 janv. 2010 10:49
par Dexxpo
Arf je viens de voir que c'est avec le nouveau UDF que y a cette erreur moi j'utilise ça comme UDF et y a pas d'erreur avec AServiceMenu.
et j'ai une erreur main() avec mon script quand je fais CTRL + F5 (je ne connaissais pas

)
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mer. 13 janv. 2010 12:37
par Tlem
Dans votre fichier, il y à aussi une erreur avec Scite et CTRL+F5:
Code : Tout sélectionner
C:\Services.au3(2202,7) : ERROR: main(): undefined function.
main()
~~~~~^
C:\Services.au3 - 1 error(s), 0 warning(s)
La fonction
main() n'existe pas ...
Edit :
En y regardant de plus prêt, cette fonction ce trouve dans la fichier
AServiceMenu.au3, donc c'est pour cela que si vous contrôlez
AServiceMenu.au3 vous n'avez pas d'erreur.
Par contre si vous utilisez
Services.au3 sans la fonction
main() alors vous avez l'erreur ...

[R] Erreur au démarrage de mon service Autoit
Posté : mer. 13 janv. 2010 13:49
par Dexxpo
J'ai trouvé

Pour info j'ai eu des problèmes avec le TCP, j'ai du initialiser le TCP avant d'entrer dans le service.
Voici ce dont on à besoin pour faire un service de base:
► Afficher le texte
Code : Tout sélectionner
If _Service_Exists($s_ServiceName) Then _Service_init($s_ServiceName)
Func Main()
While 1
If ServiceCtrlStatus() = $SERVICE_RUNNING Then
BLA
BLA
BLA
_Service_ReportStatus($SERVICE_RUNNING, $NO_ERROR, 5000)
Wend
EndFunc
Func ServiceCtrlStatus()
Local $exit = _Service_QueryStatus($s_ServiceName)
Return $exit[1]
EndFunc
Merci de m'avoir aidé!
Re: [...] Erreur au démarrage de mon service Autoit
Posté : mer. 13 janv. 2010 14:03
par Tlem
N'oubliez pas de mettre la balise [R] dans le titre de votre premier message et les balises de code lorsque vous mettez du code dans un message (même si celui-ci est dans un spoiler).
Merci