Comment supprimer une application ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Comment supprimer une application ?

Message par Jacobus »

Bonjour,

Après avoir réalisé quelques applications simples, je les ai essayé, cela fonctionne très bien.

Par contre il y a une chose que j'ai constaté et qui m'intrigue.
Pour tester mes applications je les installe simplement sur le bureau de windows pour un accès rapide et là encore aucun problème. C'est seulement lorsque je veux les supprimer après les avoir testé que se pose la difficulté. En effet, alors que le programme est fermé et n'est plus sollicité, si je demande la suppression j'obtiens un message d'erreur qui me dit : " IMPOSSIBLE DE SUPPRIMER LE FICHIER, L'APPLICATION SEMBLE EN COURS D'UTILISATION"
j'ai résolu le problème en redémarrant mon système et en supprimant l'application sans l'avoir utilisé au préalable.

Donc, je me suis dit que j'ai dû oublier un bout de code permettant de fermer réellement l'application dans mon exe. Mais je ne vois pas lequel.

Quelqu'un pourrait-il me dire ce que j'ai oublié d'insérer ou bien si cela est normal ?
Merci. :roll:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu pourrais mettre ton code ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ou alors, il t a un truc tout simple, qui m'est arrivé.

Tu n'a pas mis "End" à la fin de ton code, et ton application continue à tourner en tâche de fond.

Ca paraît bête, comme ça, mais j'ai eu ce cas avec je ne sais plus quel bout de code que j'avais lancé, et il m'a fallu un moment pour trouver.

Chris :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ou c'est window qui fout la me...
si tu mets ton prog ailleurs que sur le bureau, ça marche correctement ou pas ?

car, j'ai déjà eu pas mal de problèmes avec le bureau, je sais pas comment ils font chez MS, ils doivent coder avec des moufles pour faire autant de bug
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Salut à vous tous et merci de votre intérêt.
Je vais tâcher de vous répondre dans l'ordre:
- A Denis:
Voilà le code que j'utilise pour mon application avec Editor
(seulement la façon, question de longueur)

;structure de mon programme:

Enumeration
;liste des constantes
EndEnumeration

Procedure compteur()
EndProcedure

Procedure sauvegarde()
EndProcedure

Procedure imprimer()
EndProcedure

Procedure fenetre_principale()
EndProcedure

Procedure creation_fichier()
EndProcedure

fenetre_principale
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget
Select EventGadgetID()
; série de bouton et leurs fonctions
Case #bouton_machin
Case #bouton_ truc
etc...
EndSelect
EndIf

;-fonctions du menu
Select Event
Case #PB_EventMenu
Select EventMenuID()
Case 1
Case 2
Case 3
etc...
EndSelect

;-Fermeture du programme
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
End

ce n'est qu'un exemple, car tout ce que j'ai commis comme application a le même défaut.

*********************
A Chris: Ben si y a le "End"
mais ça ne l'empêche pas de tourner même une fois fermée.


*********************
Au Soldat inconnu:

J'ai également essayé mon application en l'enregistrant dans "Mes documents" et hélas c'est le même topo.
Quel que soit le chemin d'accès le résultat est le même.

C'est vrai que je tourne sous WINDOWS Me et que j'ai dû le patcher de partout pour qu'il ne plante plus. (Défragmenteur spécial, optimiseur de RAM, nettoyeur de registre...)

:roll: Si vous avez une idée, je suis preneur.
Si vous préférez voir tout le code je vous le montrerai ici.
Merci encore,
Jacobus.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

La structure semble bonne, mais le mieux serait peut-être que tu postes le code de ton application, (ou d'une autre qui a le même défaut, si tu ne veux pas communiquer l'autre), parce qu'il y a peut-être un détail qui cloche.

Chris :)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Code : Tout sélectionner

;-fonctions du menu 
Select Event 
Case #PB_EventMenu 
Select EventMenuID() 
Case 1 
Case 2 
Case 3 
etc... 
EndSelect 
Il ne manquerait pas un endselect dans ce bout de code ?

Pour plus de clarté pour tous, lorque tu poste du code, sélectionne le et clique sur le bouton code, ça conserve les espaces qui permettent de mieux lire le code
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Bon, je crois en effet que le plus simple c'est de vous transmettre le code que vous puissiez voir s'il manque quelque chose, voire l'essayer sur vos machines. Si vous n'obtenez pas le même blème, c'est que mon ordi souffre de quelque part et que c'est lui qui n'apprécie pas ce que je fais.

Logiquement si un EndSelect manquait, le débogueur devrait me le signaler en me lançant une de ses phrases, d'un air laconique, du genre: "Hé hé, une autre terminaison est requise ici." Mais bon...
:?:

Je vous poste ça dès demain matin, (parce que là ma femme m'attend pour la soupe, déjà qu'elle trouve que je passe trop de temps devant la bécane...) :?

Salut, merci encore et à plus,
Jacobus
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

donne la soupe à ton Windows, il ira mieux après... bon :0: :jesors:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je me suis mal exprimé,

mais peut-être qu'un Endselect n'est pas à sa place.
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

Salut,
C'est vrai que parfois j'ai envie de le bourrer de coups de cuiller à pot, mais bon mon Windows me sert encore, alors...

Il est possible que j'ai mal mis, au mauvais endroit, un EndSelect mais je n'en sais rien.
Voilà le code de l'application:

Code : Tout sélectionner

;- constantes;
Enumeration 
#WindowWidth  = 700
#WindowHeight = 500
#Fenetre_principale = 0
#gadget_editeur = 1
#bouton_imprimer 
#bouton_creer 
#bouton_copier
#bouton_coller
#bouton_couper
#bouton_annuler
#bouton_refaire
#bouton_aide
#bouton_quitter
#bouton_effacer
#bouton_nouveau
#nombre_MC
#sauvegarde
EndEnumeration 

 

Procedure Compter_MC(Dossier.s) 
  If ExamineDirectory(n, Dossier, "*.txt")  : nb=0
  Repeat 
  Filetype = NextDirectoryEntry()  
  If FileType = 1 : Nb + 1 
  EndIf 
  Until FileType = 0 
  EndIf 
  ProcedureReturn Nb 
EndProcedure

Procedure sauvegarde_MC()
RepertoireSource$ = "C:\WINDOWS\Bureau\Src\Main-Courante\"
RepertoireDestination$ = "A:\Sauvegarde Main-Courante"
Resultat = CopyDirectory(RepertoireSource$, RepertoireDestination$,"")
  If Resultat = 0
   MessageRequester("IMPOSSIBLE DE COPIER","LA SAUVEGARDE DES MAIN-COURANTES A ECHOUE !",#MB_ICONWARNING | #PB_MessageRequester_ok )
  Else 
  If Resultat = 1
   MessageRequester("Création d'une disquette de sauvegarde","LA SAUVEGARDE DES MAIN-COURANTES A REUSSI !",#MB_ICONINFORMATION | #PB_MessageRequester_ok )
  EndIf 
  EndIf   
EndProcedure 

Procedure imprimer()
      If PrintRequester() 
        If StartPrinting("Main-Courante") 
          If StartDrawing(PrinterOutput()) 
            DrawingFont(LoadFont(2, "Comic Sans MS", 30) ) 
            For n=1 To CountGadgetItems(1) 
              Locate(100, 100 * n ) : DrawText(GetGadgetItemText(1,n-1,0))  
            Next 
            StopDrawing() 
          EndIf 
          StopPrinting() 
        EndIf 
      EndIf      
EndProcedure 


Procedure Ouvre_Fenetre_principale()
 If OpenWindow(0,100,100, #WindowWidth, #WindowHeight, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_WindowCentered |#PB_Window_TitleBar, "COMPTE RENDU - MAIN-COURANTE")And CreateGadgetList(WindowID(0)) 
 If LoadFont(0,"Times New Roman",10) 
    SetGadgetFont(#Gadget_editeur,FontID())   
 EndIf  
 If CreateGadgetList(WindowID())
     ButtonGadget(#bouton_couper,580,40,80,20,"COUPER")
     GadgetToolTip(#bouton_couper,"Enlève le texte sélectionné")
     ButtonGadget(#bouton_copier,580,65,80,20,"COPIER")
     GadgetToolTip(#bouton_copier,"Le texte sélectionné est placé dans le presse-papier")
     ButtonGadget(#bouton_coller,580,90,80,20,"COLLER")
     GadgetToolTip(#bouton_coller,"Le texte copié dans le presse-papier est collé à l'endroit du curseur")
     ButtonGadget(#bouton_annuler,580,115,80,20,"ANNULER")
     GadgetToolTip(#bouton_annuler,"Annule la dernière opération effectuée")
     ButtonGadget(#bouton_refaire,580,140,80,20,"REFAIRE")
     GadgetToolTip(#bouton_refaire,"Recommence la dernière opération effectuée")
     ButtonGadget(#bouton_effacer,580,165,80,20,"Page blanche")
     GadgetToolTip(#bouton_effacer,"Je préfère travailler sur une page blanche")
     ButtonGadget(#bouton_nouveau,580,190,80,20,"Nouvelle M.C.")
     GadgetToolTip(#bouton_nouveau,"Commencer une nouvelle Main-Courante")
     ButtonGadget(#bouton_imprimer,580,230,80,30,"Imprimer la M.C.")
     GadgetToolTip(#bouton_imprimer,"Imprime le texte tel que sur l'écran")
     ButtonGadget(#bouton_creer, 580, 265, 80, 40, "Editer la main courante",#PB_Button_MultiLine)
     GadgetToolTip(#bouton_creer,"Envoie la MC créée dans le Bloc-notes")
     ButtonGadget(#bouton_aide,580,315,80,20,"AIDE")
     GadgetToolTip(#bouton_aide,"Voir comment utiliser le doc. pré-établi")
     ButtonGadget(#bouton_quitter,580,340,80,20,"QUITTER")
     GadgetToolTip(#bouton_quitter,"Ferme le registre de Main-courante")
     Frame3DGadget(0,560,25,120,430,"",#PB_Frame3D_Single)
     
     ButtonGadget(#sauvegarde,580,380,80,60,"Créer une disquette de sauvegarde",#PB_Button_MultiLine )
     GadgetToolTip(#sauvegarde,"Insérez une disquette dans le lecteur (A:) et sauvegardez vos M.C.")
     
 If LoadFont(0, "Times New Roman", 10, #PB_Font_Bold)
    TextGadget(#nombre_MC, 200, 450, 300, 20, "INVENTAIRE => Nombre de M.C.enregistrées  :     " + Str(Compter_MC("C:\WINDOWS\Bureau\Src\Main-Courante\"))) 
    SetGadgetFont(#nombre_MC, FontID())
    
     EditorGadget(#gadget_editeur, 10, 30, 530, 400, Text1)
     AddGadgetItem(#Gadget_editeur, 0, "                                                                         COMPTE RENDU D'INTERVENTION")    
     AddGadgetItem(#Gadget_editeur, 1, "MAIN-COURANTE n° : ")
     AddGadgetItem(#Gadget_editeur, 2, "Journée du : ")
     AddGadgetItem(#Gadget_editeur, 3, "Heure : ")
     AddGadgetItem(#Gadget_editeur, 4, "Agents intervenus : ")
     AddGadgetItem(#Gadget_editeur, 5, "Requérant(s) : ")
     AddGadgetItem(#Gadget_editeur, 6, "Raison : ")
     AddGadgetItem(#Gadget_editeur, 7, "Objet : ")
     AddGadgetItem(#Gadget_editeur, 8, "--------------------------------------------------------------------------- LES FAITS ----------------------------------------------------------------------")
     AddGadgetItem(#Gadget_editeur, 9, "Ce jour, ")
     AddGadgetItem(#Gadget_editeur, 10, "")
     AddGadgetItem(#Gadget_editeur, 11, "")
     AddGadgetItem(#Gadget_editeur, 12, "")
     AddGadgetItem(#Gadget_editeur, 13, "")
     AddGadgetItem(#Gadget_editeur, 14, "")
     AddGadgetItem(#Gadget_editeur, 15, "Rédacteur :")
     AddGadgetItem(#Gadget_editeur, 16, "Date et heure de clôture :")
     
     Frame3DGadget(0,3,10,695,460,"Rédaction du compte rendu")   
 EndIf  
 EndIf
 
  If CreateMenu(0,WindowID())
      MenuTitle("Fichier")
       MenuItem(1,"Quitter")
      MenuTitle("Info")
       MenuItem(2,"A propos")
       MenuBar()
       MenuItem(3,"Licence")     
 EndIf
 EndIf 
EndProcedure

Procedure Creation_Fichier_Texte()
 Nombre_de_ligne = CountGadgetItems(#Gadget_editeur)
 If CreateFile(0, "Main Courante.txt")
 For n = 0 To Nombre_de_ligne - 1
 Texte.s = GetGadgetItemText(#Gadget_editeur,n,0)
 WriteStringN(Texte)
 Next
 CloseFile(0)
 EndIf
 RunProgram("Main Courante.txt")
EndProcedure
 
 ;- Debut du programme
Ouvre_Fenetre_principale()

Repeat : Event = WaitWindowEvent()
 If Event = #PB_EventGadget
 Select EventGadgetID()

       Case #bouton_creer
          Creation_Fichier_Texte()
       
       Case #bouton_couper 
          Vide$ = "" 
          SendMessage_(GadgetID(#gadget_editeur),#EM_GETSEL,@StartSel,@EndSel) 
          Buffer$ = Space(EndSel-StartSel) 
          SendMessage_(GadgetID(#gadget_editeur),#EM_GETSELTEXT,0,@Buffer$) 
          ClearClipboard() 
          SetClipboardText(Buffer$) 
          SendMessage_(GadgetID(#gadget_editeur),#EM_REPLACESEL,#True,@Vide$) 
          
        Case #bouton_copier  
          SendMessage_(GadgetID(#gadget_editeur),#EM_GETSEL,@StartSel,@EndSel) 
          Buffer$ = Space(EndSel-StartSel) 
          SendMessage_(GadgetID(#gadget_editeur),#EM_GETSELTEXT,0,@Buffer$) 
          ClearClipboard() 
          SetClipboardText(Buffer$) 
          
        Case #bouton_coller
          Buffer$ = GetClipboardText() 
          SendMessage_(GadgetID(#gadget_editeur),#EM_REPLACESEL,#True,@Buffer$) 
          
        Case #bouton_annuler
          SendMessage_(GadgetID(#gadget_editeur),#EM_UNDO,0,0) 
          
        Case #bouton_refaire
          SendMessage_(GadgetID(#gadget_editeur),#EM_REDO,0,0) 
          
        Case #bouton_quitter
          CloseWindow(0)
          
        Case #bouton_aide
         MessageRequester("UTILISATION de la MAIN-COURANTE","POUR CE QUI EST DES BOUTONS IL SUFFIT DE PASSER LE CURSEUR DESSUS POUR OBTENIR L'INFO. - DANS L'EDITEUR, A GAUCHE, REMPLIR LES PARTIES VOULUES (SACHANT QU'IL N'Y A PAS DE RETOUR AUTOMATIQUE IL FAUT PASSER A LA LIGNE SUIVANTE AVEC LA TOUCHE ENTREE ET CECI A CHAQUE FOIS QUE VOUS ARRIVEZ EN BOUT DE LIGNE AFIN DE MAINTENIR UNE FORME QUI SERA FACILEMENT IMPRIMABLE. LORSQUE VOUS AVEZ TERMINE VOTRE M.C., CLIQUEZ SUR [Editer la main courante], ALLEZ DANS [Fichier] PUIS [Enregistrer sous...]. NOMMEZ VOTRE M.C. PUIS SELECTIONNEZ LE DOSSIER [Main-courante]. CLIQUEZ ENSUITE SUR [Enregistrer]. REFERMER LA FENETRE DU BLOC-NOTES EN CLIQUANT SUR LA CROIX EN HAUT A DROITE.  POUR IMPRIMER UNE M.C.DEJA ENREGISTREE, UTILISEZ LE TABLEAU DE CONSULTATION POUR OUVRIR VOTRE MC OU PLUSIEURS PUIS CLIQUEZ SUR [Imprimer] ",#PB_MessageRequester_Ok | #MB_ICONINFORMATION) 
       
        Case #sauvegarde
        MessageRequester("VERIFICATION AVANT COPIE","ASSUREZ-VOUS D'AVOIR INSERE UNE DISQUETTE DANS LE LECTEUR AVANT D'APPUYER SUR OK !",#MB_ICONEXCLAMATION | #PB_MessageRequester_Ok) 
        sauvegarde_MC()
         
        Case #bouton_imprimer
         imprimer()
        
        Case #bouton_effacer
         ClearGadgetItemList(#gadget_editeur)
         
        Case #bouton_nouveau
        CloseWindow(0)
        Ouvre_Fenetre_principale()
 EndSelect
 EndIf

;-fonctions du menu
 Select Event : Case #PB_EventMenu
 Select EventMenuID()
      Case 1;Item>Quitter
       CloseWindow(0)
      Case 2;Item> A propos
       MessageRequester("A PROPOS","Utilitaire de Main-courante, version 1 ",#MB_ICONINFORMATION | #PB_MessageRequester_Ok)
      Case 3;Item>Licence
       MessageRequester("Licence d'utilisation à :","Vous pouvez utiliser ce programme gratuitement sans limitation de durée. Tous droits réservés à l'auteur",#MB_ICONINFORMATION | #PB_MessageRequester_Ok)
 EndSelect
    
;-Fermeture du programme   
     Case #PB_Event_CloseWindow  
      Quit = 1
    EndSelect
    Until Quit = 1
    End


POUR INFO: Il s'agit d'une partie d'une suite d'applications un peu du même genre, dont chacune a un document pré-établi (compte rendu; courrier à untel; note à l'attention; etc...) et toutes sortes de documents que l'on ne trouve généralement que sous forme papier.
D'où l'idée :idea: de faire plein de petits exécutables grâce à ce merveilleux outil qu'est pureBasic.

Donc pour en revenir au sujet, voyez-vous dans ce code la raison pour laquelle Windows retient l'application (avec ses petits bras musclés) en utilisation continue malgré la fermeture ?
j'avoue ne pas être assez doué pour le voir.

Bon week-end et joyeux Noël à tous,
jacobus.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Remplace dans la boucle d'événement

CloseWindow(0)

par

Quit = 1


et dis-moi si ça va.

CLoseWindow ferme la fenêtre effectivement mais quit ne passe jamais à 1 donc on ne quitte jamais
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

8O J'essaye ça et je confirme dèsque possible
Avatar de l’utilisateur
Jacobus
Messages : 1559
Inscription : mar. 06/avr./2004 10:35
Contact :

Message par Jacobus »

:D Merci Denis, c'était effectivement le "truc" pour fermer correctement l'application, et ainsi la suppression est possible.
Donc grâce à toi j'ai encore appris quelque chose.

:10: à toi et à la communauté de ce Forum !

jacobus
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

C'est le parfait exemple qui montre qu'il faut toujours, dans la mesure du possible, poster un bout de code.

La structure que tu avais donnée, au départ, était bonne, mais il y avait juste un bémol...

Chris :)
Répondre