cela m'a permis d'avancer déjà, voici le code modifier et franciser, mais j'ai encore  
Code : Tout sélectionner
;#dCKardLivePort        = 10005
#dCLogFile             = "monlog.log" ;-<Nom du fichier de log
;#dCLogFileB            = "KardLiveVFP05B.log" A quoi il sert lui ?
#dCServiceName         = "monservice" ;-<=Nom du service (utiliser pour net start nomservice/net stop..)
#dCServiceAppName      = "monservice.exe" ;-<= nom de l'executable avec son ext
#dCServiceDisplayName  = "mon service nom complet" ;-<=Nom complet du service (utilise pour le visualiser depuis le gestionnaire de processus et services)
;
; Use a structure when Windows API use an array of strings
;
Structure SrvParam
   Param1.s
   Param2.s
EndStructure
Declare Main()
Declare Service_Install(tcService.s)
Declare Service_Delete(tcService.s)
Declare Service_Debug()
Declare Service_Start(tcService.s)
Declare Service_Stop(tcService.s)
Declare Service_MainLoop(tnCount.i,*tcParam.SrvParam)
Declare Service_CtrlHandler(thCtrlRequest.l)
Declare WriteToLog(tcText.s)
Global gServiceStatus.SERVICE_STATUS,gcStartIn.s
Global ghStatus.i,gnLog.i,gnDebug.i
SetCurrentDirectory(GetPathPart(ProgramFilename()))
gcStartIn = GetCurrentDirectory();-<écrit le fichier de log à l'emplace de l'executable
If OpenFile(0,gcStartIn+#dCLogFile);-<ici
   FileSeek(0, Lof(0))
EndIf
Main()
If IsFile(0)
   CloseFile(0)
EndIf   
;
; Main Function
;
Procedure Main()
   WriteToLog(gcStartIn)
   Select ProgramParameter(0)
      Case "-i", "install"
         Service_Install(#dCServiceName)
      Case "-d", "delete", "-u", "uninstall"
         Service_Delete(#dCServiceName)
      Case "-k", "kill", "stop"
         Service_Stop(#dCServiceName)
      Case "debug"
         gnLog = 1
         gnDebug = 1
         SetCurrentDirectory(ProgramParameter(1))
         gcStartIn = GetCurrentDirectory()
         WriteToLog(GetCurrentDirectory())
         Service_MainLoop(0,0)
      Case "-l", "log"
         gnLog = 1
         Service_Start(#dCServiceName)
      Default
         Service_Start(#dCServiceName)
   EndSelect
EndProcedure
;
; Write New Log Entry
;
Procedure WriteToLog(tcText.s)
   If IsFile(0)
      WriteStringN(0, FormatDate("%yyyy.%mm.%dd %hh:%ii:%ss", Date())+" "+tcText)
      FlushFileBuffers(0)
   EndIf
EndProcedure
;
; Install a Service
;
Procedure Service_Install(tcService.s)
   Protected lcDir.s, lhSCManager.l, lhService.l, SD.SERVICE_DESCRIPTION
   
   WriteToLog("Service_Install() > Start")
   lcDir        = GetCurrentDirectory() + #dCServiceAppName
   lhSCManager  = OpenSCManager_(#Null, #Null, #SC_MANAGER_ALL_ACCESS)
   lhService    = CreateService_(lhSCManager, tcService, #dCServiceDisplayName, #SERVICE_ALL_ACCESS, #SERVICE_WIN32_OWN_PROCESS, #SERVICE_AUTO_START, #SERVICE_ERROR_NORMAL, lcDir, #Null, #Null, #Null, #Null, #Null)
   
   SD\lpDescription = @"mon super service"   ;-<= Description du service
   
   ChangeServiceConfig2_(lhService, #SERVICE_CONFIG_DESCRIPTION, @SD)
   CloseServiceHandle_(lhService)
   CloseServiceHandle_(lhSCManager)
   
   WriteToLog("Service_Install() > End")
EndProcedure
;
; Delete Service
;
Procedure Service_Delete(tcService.s)
   Protected lhSCManager.l,lhServ.l
   WriteToLog("Service_Delete() > Start")
   lhSCManager.l = OpenSCManager_(#Null, #Null, #SC_MANAGER_ALL_ACCESS)
   lhServ.l = OpenService_(lhSCManager, tcService, #SERVICE_ALL_ACCESS)
   DeleteService_(lhServ)
   CloseServiceHandle_(lhServ)
   CloseServiceHandle_(lhSCManager)
   WriteToLog("Service_Delete() > End")
EndProcedure
;
; Start Service
;
Procedure Service_Start(tcService.s)
   Protected lnErr.l,Dim ServiceTable.SERVICE_TABLE_ENTRY(1)
   WriteToLog("Service_Start() > Start")
   With ServiceTable(0)
      \lpServiceName = @tcService
      \lpServiceProc = @Service_MainLoop()
   EndWith
   With ServiceTable(1)
      \lpServiceName = #Null
      \lpServiceProc = #Null
   EndWith
   If StartServiceCtrlDispatcher_(@ServiceTable()) = 0
      lnErr.l=GetLastError_()
      Select lnErr
         Case #ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
            WriteToLog("Last Error FAILED_SERVICE_CONTROLLER_CONNECT")
         Case #ERROR_INVALID_DATA
            WriteToLog("Last Error INVALID_DATA")
         Case #ERROR_SERVICE_ALREADY_RUNNING
            WriteToLog("Last Error SERVICE ALREADY_RUNNING")
         Default
            WriteToLog("Last Error "+StrU(lnErr,#PB_Word))
      EndSelect
   EndIf
   WriteToLog("Service_Start() > End")
EndProcedure
;
; Stop the Service
;
Procedure Service_Stop(tcService.s)
   Protected lhSCManager.l,lhServ.l
   WriteToLog("Service_Stop() > Start")
   lhSCManager.l= OpenSCManager_(#Null, #Null, #SC_MANAGER_ALL_ACCESS)
   lhServ.l= OpenService_(lhSCManager, tcService, #SERVICE_ALL_ACCESS)
   ControlService_(lhServ, #SERVICE_CONTROL_STOP, @gServiceStatus)
   CloseServiceHandle_(lhServ)
   CloseServiceHandle_(lhSCManager)
   WriteToLog("Service_Stop() > End")
EndProcedure
;
; Update Service Status
;
Procedure Service_UpdateStatus(tcService.s)
   Protected lhSCManager.l,lhServ.l
   lhSCManager.l= OpenSCManager_(#Null, #Null, #SC_MANAGER_ALL_ACCESS)
   lhServ.l= OpenService_(lhSCManager, tcService, #SERVICE_ALL_ACCESS)
   QueryServiceStatus_(lhServ,@gServiceStatus)
   CloseServiceHandle_(lhServ)
   CloseServiceHandle_(lhSCManager)
EndProcedure
;
; Main Service
;
Procedure Service_MainLoop(tnCount.i,*tcParam.SrvParam) ; Windows passes the number of parameter and a pointer to an array of parameter strings
   ;;<<<<<<<Define lnThread.i,*lnReturnPtr,*loVFP.KardAuth,lcCID.s,lnCID.i,lnETX.i,lnSTX.i,lcTxt.s,lnLen.i,ln.i,lcIPAddr.s
   Define lnThread.i,*lnReturnPtr,lcCID.s,lnCID.i,lnETX.i,lnSTX.i,lcTxt.s,lnLen.i,ln.i,lcIPAddr.s
   ;<<<<<<<<<NewMap lmEventClnt.Client()
   Dim laRcvd.s(1)
   WriteToLog("Service_MainLoop() > Start")
   If Not gnDebug
      With gServiceStatus
         \dwServiceType             = #SERVICE_WIN32_OWN_PROCESS
         \dwCurrentState            = #SERVICE_START_PENDING
         \dwControlsAccepted        = #SERVICE_ACCEPT_STOP | #SERVICE_ACCEPT_SHUTDOWN
         \dwWin32ExitCode           = 0
         \dwServiceSpecificExitCode = 0
         \dwCheckPoint              = 0
         \dwWaitHint                = 0
      EndWith
      ghStatus = RegisterServiceCtrlHandler_(#dCServiceName, @Service_CtrlHandler())
      If ghStatus = 0
         WriteToLog("Registering Control Handler failed")
         ProcedureReturn
      EndIf
      SetServiceStatus_(ghStatus, @gServiceStatus)
   EndIf
   If Not gnDebug
      gServiceStatus\dwCurrentState = #SERVICE_RUNNING
      SetServiceStatus_(ghStatus, @gServiceStatus)
  Else
      OpenConsole()
      Print("Press Escape to exit.")
   EndIf
   While (Not gnDebug And gServiceStatus\dwCurrentState = #SERVICE_RUNNING) Or (gnDebug And Inkey() <> Chr(27))
;
; -mettre le code dans cette boucle
; -(danger : il s'agit d'une boucle ! a ne pas bloquer sinon =
; -arret du service via --> gestionnaiire de processus --> afficher tous les processus --> nom du service.exe --> arreter le procesus)
;
     
If FileSize("c:\test.txt")<0;-vue que c'est une boucle cela peut faire le bordel si ça ouvre plein de fois notepad...
n.l=OpenFile(#PB_Any,"c:\test.txt")
If n.l
  WriteStringN(n.l,"Session utilisé par le service : "+UserName())
  Delay(300)
  CloseFile(n.l)
  RunProgram("notepad.exe")
  ;- BESOIN d'aide : n'affiche pas notepad (même si je met ma propre session dans les option du service, que ce soit compiler en admin ou nom)
  ;- Le logiciel est bien lancer mais pas afficher?..
EndIf
EndIf
  Wend
   If gnDebug
      CloseConsole()
   EndIf
   gServiceStatus\dwCurrentState = #SERVICE_STOPPED
   SetServiceStatus_(ghStatus, @gServiceStatus)
   
   WriteToLog("Service_MainLoop() > End")
EndProcedure
;
; Service Control Handler
;
Procedure Service_CtrlHandler(thCtrlRequest.l)
   WriteToLog("Service_CtrlHandler() > Start")
   Select thCtrlRequest
      Case #SERVICE_CONTROL_INTERROGATE
         WriteToLog("Service reported its current status to the SCM.")
      Case #SERVICE_CONTROL_STOP
         WriteToLog("Service stopped.")
         With gServiceStatus
            \dwWin32ExitCode = 0
            \dwCurrentState = #SERVICE_STOP_PENDING
         EndWith
      Case #SERVICE_CONTROL_SHUTDOWN
         WriteToLog("Service shutdown.")
         With gServiceStatus
            \dwWin32ExitCode = 0
            \dwCurrentState  = #SERVICE_STOP_PENDING
         EndWith
      Default
         WriteToLog("CtrlRequest Unknown = "+Str(thCtrlRequest))
   EndSelect
   SetServiceStatus_(ghStatus, @gServiceStatus);
   WriteToLog("Service_CtrlHandler() > End")
EndProcedure
 je veut ouvrir notepad pour test, il se lance mais ne s'affiche pas quelqu'un a une solution ?