IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Interdire des lancements multiples d'une application


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut Interdire des lancements multiples d'une application
    Bonjour,

    une application peut être lancée plusieurs fois, soit lorsqu'on répète le clic sur son icone, soit en cliquant sur divers racourcis.
    Je souhaiterait interdire la possibilité de ces lancements multiples, c'est à dire : Lorsque l'application a été démarrée une première fois, qu'il soit impossible de la lancer à nouveau, pendant tout le temps où est est active.
    Merci par avance de tout conseil à ce sujet.

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu as une explication dans la FAQ

    A+

  3. #3
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Merci ero-sennin,

    en effet, j'avais vu la réponse à "comment instancier une seule fois un programme".
    Mais ca ne marche pas, peut être parce que la mise en place dépasse mes capacités (j'ai sans arrêt des erreurs incompréhensibles) ou peut-être que ce n'est pas compatible avec Delphi4.
    J'espérais quelque chose de plus "rustique" et surtout plus à la portée d'un débutant.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par JJJJJ Voir le message
    Mais ca ne marche pas, peut être parce que la mise en place dépasse mes capacités (j'ai sans arrêt des erreurs incompréhensibles) ou peut-être que ce n'est pas compatible avec Delphi4.
    La mise en place d'un Mutex est assez simple.
    Quelles sont ces erreurs, à la compilation ou à l'exécution? Peux-tu nous montrer ton .dpr où tu as mis en place la création du mutex?

    @+ Claudius

  5. #5
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    C'était à la compilation.
    En fait, j'avais laissé tomber ce problème depuis pas mal de temps et je viens de m'y remettre.
    Je travaillais sur un programme volumineux et assez touffu. J'aurais du essayer en tavaillant sur un petit programme de test. C'est ce que je vais faire maintenant. En tout cas, ce sera plus simple et plus clair pour rapporter sur le forum les erreurs rencontrées.
    @+

  6. #6
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Désolé, la question n'était pas bien posée.
    Il s'agit d'une application, disons : "Outil.exe" (relativement petite), mais qui fait partie d'un ensemble volumineux et assez compliqué d'applications qui interagissent.
    "Outil.exe" peut être activée soit directement par l'utilisateur, soit par certaines des autres applications.
    Le concepteur n'est pas maître de l'usage qui est fait de tout cela : Pour des convenances personnelles, un utilisateur peut très bien changer le nom, qui peut devenir "MonOutil.exe" par exemple. Voire même, il fait des copies de "Outil.exe" qu'il met dans des dossiers différents, au lieu de créer des raccourcis. Mais l'utilisateur est roi, on ne peut rien contre.
    Ceci est également vrai pour d'autres applications de l'ensemble, mais ce n'est pas trop gênant. Sauf dans le cas de "Outil.exe" : il faut éviter que plusieurs copies ou variantes soient actives en même temps.
    Actuellement, c'est du rafistolage. Il est hors de question de toucher à l'ensemble. Tout au plus, j'ai pu ajouter quelques lignes de code (copie jointe) grâce auxquelles:
    Lorsqu'une application "Outil.exe", ou "MonOutil.exe", ou une copie (nommée on ne sait pas comment ) est activée, elle commence par regarder si le clipboard contient un mot particulier, par exemple 'Scrunch'. Si oui, elle se ferme immédiatement (application.terminate). Si non, elle écrit 'Scrunch' dans le clipboard, elle continue son exécution jusqu'à la fin et alors efface 'Scrunch' (ce qui ouvre la possibilité d'une nouvelle exécution de cette application ou d'une autre de ses semblables, mais une seule à la fois).
    Ca marche, mais je me demandais s'il n'y a pas d'autre idée, ou une meilleure méthode que celle-là, qui me semble du bricolage. D'autant plus que le clipboard est monopolisé : c'est à nouveau la pagaille si l'on utilise le clipboard en même temps pour un besoin différent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
         mot:=' ';    {mot:string}
         if Clipboard.HasFormat(CF_TEXT) then mot:=Clipboard.AsText;
         if mot='Scrunch' then application.terminate else
         Clipboard.AsText:= 'Scrunch';
    end;
     
    procedure TForm1.FormDeactivate(Sender: TObject);
    begin
         if mot<>'Scrunch' then Clipboard.AsText:=mot;
    end;

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Cette manipulation avec le presse-papier n'est pas vraiment envisageable, parce que non fiable.

    Je vais ré-enfoncer le clou, mais ne t'orientes-tu pas vers la création d'un Mutex? C'est vraiment la méthode la plus simple pour s'assurer de n'avoir qu'une seule instance de l'application.
    Quelque soit le nom que porte l'application d'ailleurs.

    Quels sont tes difficultés pour mettre le Mutex en place ?
    Ce n'est plus compliqué que l'exemple donné dans la FAQ.

    @+ Claudius.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Je viens de revenir à cette question qui ne faisait pas partie de mes urgences.
    Ceci pour dire que le mutex marche bien maintenant.
    Il ne me restera plus qu'à convaincre les utilisateurs d'éliminer les anciennes versions et mettre en place la nouvelle, ce qui est une autre affaire.
    Je suis satisfait que problème soit mieux réglé avec mutex qu'avec le "bricolage" imaginé d'abord et qui ne me rassurait pas. Merci de m'avoir aidé efficacement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation des fichiers CSS dans une application Struts
    Par menzlitsh dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/09/2006, 16h29
  2. Réponses: 9
    Dernier message: 25/07/2006, 10h18
  3. [C#] Lier des boutons radio dans une application mobile
    Par Loïc56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/04/2005, 13h00
  4. Passage des chaînes de caractères à une application CGI
    Par Thom@s dans le forum Composants VCL
    Réponses: 10
    Dernier message: 03/12/2004, 00h13
  5. Réponses: 2
    Dernier message: 12/10/2004, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo