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

C Discussion :

Vérifier si un programme est ouvert et l'utiliser


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Vérifier si un programme est ouvert et l'utiliser
    Bonjour

    J'aimerai que si j'ouvre à nouveau un programme, ce soit le même programme déjà ouvert qui réponde à la place.
    Comme firefox ou openoffice qui n'ouvre pas une nouvelle instance si par un lien quelconque j'ouvre un fichier qui s'adresse à eux( .html pour le premier ou .odt pour le second par exemple).

    Système : Linux et Windows
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Cherche "Single Instance Program" chez note ami Google, il y a plusieurs solutions possibles, après, cela dépend aussi de comment tu veux le faire.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Je pense mettre un lock dans le répertoire où le programme stocke les infos pour les mémoriser d'une session à l'autre.
    Je compte aussi mettre des lock lors des ouvertures des fichiers de travail utilisés par mon programme afin de ne les ouvrir qu'une fois.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    Le plus propre sous UNIX est de déposer un fichier dans /var/lock, qui sert à cela. Le fichier peut être vide ou contenir le PID de l'application. Ce PID peut aussi faire partie du nom du fichier. Idéalement, tu peux aussi créer un socket UNIX nommé de la même façon dans /tmp ou /var/run qui permette de communiquer avec l'application si elle est ouverte.

    L'inconvénient de ces méthodes est que, dans les deux cas, le ménage ne se fait pas tout seul si l'application a été tuée brutalement. Il faut donc vérifier si le PID existe toujours, s'il correspond toujours à ladite application ou, le cas échéant, faire le ménage en lançant la nouvelle instance.

    Par contre, de grâce, n'utilise pas un port réseau TCP ou UDP pour le faire, comme cela s'est déjà vu sur des applications professionnelles. C'est plus que sale vu de l'extérieur (ton admin système risque de te tuer) et ton application sera impossible à faire tourner sur serveur mutualisé, voire même sur PC avec deux sessions ouvertes.

  5. #5
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Idéalement, tu peux aussi créer un socket UNIX nommé de la même façon dans /tmp ou /var/run qui permette de communiquer avec l'application si elle est ouverte.
    Cette méthode me conviendrait tout à fait si je savais faire !
    Il va falloir que je trouve une doc en français pour apprendre à faire
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    sinon, avec getpid, et sous unix en faisant un ps -ef et en lisant la chaine..

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    Hello,

    Citation Envoyé par souviron34 Voir le message
    sinon, avec getpid, et sous unix en faisant un ps -ef et en lisant la chaine..
    Non, ce n'est vraiment pas propre. Un socket UNIX à la bonne place éventuellement flanqué d'un SSID unique si l'on craint vraiment les collisions suffira à remplir toutes les conditions…

    Citation Envoyé par troumad Voir le message
    Cette méthode me conviendrait tout à fait si je savais faire !
    Il va falloir que je trouve une doc en français pour apprendre à faire
    Les sockets UNIX se gèrent exactement de la même façon que les sockets réseau Internet, à ceci près que tu utiliseras la famille AF_UNIX plutôt que AF_INET et que tu passeras un nom de fichier avec son chemin plutôt qu'une adresse IP.

    Ensuite, tu te « connectes » à ce nom de fichier comme tu te connecterais à un port réseau habituel. Par contre, le nom de fichier aura été ajouté au filesystem et ne disparaîtra pas automatiquement si le processus meurt. Il faudra donc penser à faire le ménage en sortant et/ou éliminer ces sockets morts au lancement d'une instance.

Discussions similaires

  1. Vérifier que le programme est ouvert
    Par Loenix dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 14/05/2009, 15h50
  2. Vérifier si un programme est ouvert
    Par wonderboutin123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/02/2008, 11h36
  3. Vérifier si calc windows est ouverte ou pas???
    Par electrosat03 dans le forum Contribuez
    Réponses: 4
    Dernier message: 10/03/2006, 19h28
  4. Vérifier qu'un formulaire est ouvert
    Par com800 dans le forum WinDev
    Réponses: 2
    Dernier message: 07/04/2005, 20h27
  5. Vérifier si une form est ouverte
    Par nivet dans le forum Langage
    Réponses: 6
    Dernier message: 23/11/2004, 09h17

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