Relancer mon programme automatiquement sous Windows 10

Codes specifiques à Windows
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Relancer mon programme automatiquement sous Windows 10

Message par hub73 »

Bonjour à tous.

Il arrive que mon programme de lecture de playliste audio plante, ce qui est facheux pour une webradio qui devrait diffuser continuellement.
Je corrige les bugs et çà arrive peu, mais j'aimerai trouver un moyen de le relancer automatiquement s'il plante pour une bêtise. (Le temps que je rentre du boulot et que j'analyse les logs du programme).

D'après mes recherches sur le forum, je devrais réaliser un programme 'service' de windows.

Du coup ce programme pourrait :
- Lancer mon programme automatiquement au démarrage de windows, lancer ensuite le programme de streaming vers le serveur (Broadcast Rocket)
- Si mon programme plante, essayer de le relancer trois fois.

Existe-t-il un tutoriel à jour sur ce sujet ? Une base pour bien structurer le programme et commencer sa réalisation. Comment déterminer que le programme est en cours d'exécution et n'a pas planté ? Merci.

https://www.lesfloralies.info
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Relancer mon programme automatiquement sous Windows 10

Message par Ar-S »

Les services je trouve ça vraiment pas pratique à utiliser,
Solution windows
tu peux cependant utiliser les tâches planifiés de windows et lui donner le comportement que tu veux en cas de fermeture intempestive.
Solution windows en PB (via api)
Tu crées un autre exe qui surveille la fenêtre du programme (un timer toutes les x sec/min) voir API FindWindow_. Si celle ci disparaît, il le relance via un runprogram.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Re: Relancer mon programme automatiquement sous Windows 10

Message par hub73 »

Code : Tout sélectionner

; ----------------------------------------------------------------------
;
; PROGRAMME STARTER  RADIO DES FLORALIES
;
; ----------------------------------------------------------------------
; UNIQUEMENT POUR WINDOWS
;
; Hubert BAYRE : hubert.bayre@orange.fr
; mai 2021

EnableExplicit

XIncludeFile "formulaire_programmation_starter.pbf"

Global Event
Global bFini

Global bLancer 
Global ProgrammeID
Global Message$

Global TempsAffichage
Global TempsTest

Global NbTentatives

Global Etat

#PROGRAMME_A_DETERMINER = 0
#PROGRAMME_ACTIF = 1
#PROGRAMME_INACTIF = 2
#PROGRAMME_A_LANCER = 3
#PROGRAMME_LANCE = 4
#PROGRAMME_TENTATIVES_REALISEES = 5

#MAX_LANCEMENTS = 5

#TITRE_FENETRE_APPLICATION = "Programmation Radio Les Floralies"

; ---------------------------------------------------------
; 
; FONCTIONS
;
; ---------------------------------------------------------

Procedure Quitter()
  
  Define Result
  
  Result = MessageRequester("Quitter le programme", "Quitter, veuillez faire votre choix :", #PB_MessageRequester_YesNo)
  If Result = #PB_MessageRequester_Yes   
    ProcedureReturn #True
  Else                                   
    ProcedureReturn #False
  EndIf
  
EndProcedure

Procedure Tester()
  
  Define bTrouve
  Define hWnd
  Define cnt
  Define Title.s
  
  bTRouve = #False
	Repeat
    hWnd = FindWindowEx_(0, hWnd, 0, 0)
    If hwnd
      cnt + 1
      title.s = Space(512)
      GetWindowText_(hWnd, @title, 512)
      If CountString (title,#TITRE_FENETRE_APPLICATION) = 1
        bTrouve = #True
      EndIf
    EndIf
  Until hWnd = 0	
  
  If bTrouve = #False 
    Etat = #PROGRAMME_A_LANCER
  EndIf
  
  
EndProcedure

; ---------------------------------------------------------
; 
; PROGRAMME PRINCIPAL
;
; ---------------------------------------------------------


TempsAffichage = ElapsedMilliseconds()
TempsTest = ElapsedMilliseconds()

bLancer = #False
bFini = #False

Etat = #PROGRAMME_A_DETERMINER

OpenWindow_1(0,0)

Message$ = ""

NbTentatives = 0

Repeat
	Event = WindowEvent()
	If Event
	  Select Event
	      
			Case #PB_Event_CloseWindow
			  bFini = Quitter()
			  
			Case #PB_Event_Gadget 
			  Select EventGadget()
			    Case Button_demarrer
			      If bLancer = #False
			        SetGadgetText (Button_demarrer, "Arrêter")
			        bLancer = #True
			      Else
			        SetGadgetText (Button_demarrer, "Démarrer")
			        bLancer = #False
			      EndIf
			  EndSelect
			  
		EndSelect
	Else
		Delay(2)
	EndIf
	
  If ElapsedMilliseconds() - TempsTest > 2000
  	Tester()
    TempsTest = ElapsedMilliseconds()
  EndIf
	
  
  If bLancer = #True
  
    Select Etat
          
      Case #PROGRAMME_A_LANCER
        
        If IsProgram (ProgrammeID) = 0
        
          If NbTentatives < #MAX_LANCEMENTS
            
            ProgrammeID = RunProgram ("programmation_radio.exe","",GetCurrentDirectory())
            Delay (3000)
            
            Message$ = "Lancement du programme."
            
            NbTentatives = NbTentatives + 1
            Etat = #PROGRAMME_ACTIF
            
          Else
            
            Etat = #PROGRAMME_TENTATIVES_REALISEES
            
          EndIf
        
        EndIf
        
        
      Case #PROGRAMME_ACTIF
        Message$ = "Programme actif."
        
      Case #PROGRAMME_TENTATIVES_REALISEES
        Message$ = "Hors tentatives !"
        
    EndSelect
    
  Else
    
    Message$ = "En attente"
    NbTentatives = 0
    
  EndIf
  
  If ElapsedMilliseconds() - TempsAffichage > 500	
    SetGadgetText (Text_message, Message$)
    TempsAffichage = ElapsedMilliseconds()
  EndIf
  
  Delay(2)
  
Until bFini	

End

; ---------------------------------------------------------
; 
; FIN DU PROGRAMME
;
; ---------------------------------------------------------
Merci !
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Relancer mon programme automatiquement sous Windows 10

Message par Ar-S »

Bien ;)
Ajoute un timer et supprime ton delay ce sera plus propre
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
hub73
Messages : 126
Inscription : sam. 16/janv./2021 20:17

Re: Relancer mon programme automatiquement sous Windows 10

Message par hub73 »

Ajoute un timer et supprime ton delay ce sera plus propre
un exemple ?
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Relancer mon programme automatiquement sous Windows 10

Message par Ar-S »

Code : Tout sélectionner

Enumeration
    #win
    #montimer
EndEnumeration

dureeMS = 1000 ; 1sec

If OpenWindow(#win, 0, 0, 400, 100, "Exemple Minuteur", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    AddWindowTimer(#win, #montimer, dureeMS)
    
    Repeat
        Event = WaitWindowEvent()
        
        If Event = #PB_Event_Timer 
            Select EventTimer() 
                Case #montimer
                    Compte + 1
                    SetWindowTitle (#win, Str(compte))
            EndSelect
            
            
        EndIf    
        
    Until Event = #PB_Event_CloseWindow
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre