1

Salut!

J'ai un programme que l'on peut lancer avec des arguments "mon_programme --openfile /home/moi/mon_fichier"
Je voudrai éviter d'avoir plein de fenêtres à chaque fois que mon_programme est lancé.
Comment faire pour que mon_programme vérifie qu'il n'est pas déjà lancé?
S'il est déjà lancé, comment faire pour que toutes les nouvelles exécutions envoient leur commande?

NB : sous Linux seulement

2

en général on fait ça avec des fichiers PID dans /var/run

3

KUniqueApplication smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Kevin Kofler (./3) :
KUniqueApplication smile

Je voudrai ne pas utiliser les lib KDE même si cette classe est exactement ce qu'il me faut (oui j'aime réinventer la poudre).
J'ai trouvé les tube nommés (named pipes) qui correspondent exactement à ce que je cherche.
Ça m'a l'air plutôt simple à utiliser en plus. Qu'en pensez-vous?

5

Acquisition d'un mutex global avec un nom précis et "unique" (genre NOMAPP_VERSION_BLABLA) et si impossible de l'acquerir tout de suite c'est qu'une autre instance de l'application est présente. Cette approche est multi OS et fiable a 99.999% du moment que les mutex existent sur la plateforme, et ne demande pas d'acceder au systeme de fichier (avec toutes les races conditions qu'on peut avoir)

Et si tu as besoin de dire a l'instance deja présente, tu peut utilsier une methode comme les named tube (que tu site en ./4) pour envoyer un message a l'instance de l'appli deja présente avec les parametres a prendre en compte.


L'idéal c'est par exemple pour les noms :
MUTEX_APPLI_VERSION_BLABLA
TUBE_APPLI_VERSION_BLABLA

comme ça en pseudo code

int main(int argc, char *argv)
{
 if ( CreateAndGetMutex("MUTEX_APPLI_VERSION_BLABLA") == E_CANTACQUIRE)
 {
   tube = ConnectTube("TUBE_APPLI_VERSION_BLABLA")
   SendTube(tube, MakeMessage(argc, argv))

   exit()
 }
 CreateTube("TUBE_APPLI_VERSION_BLABLA");
 RunApplication()
}
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

OK. Ça avance.

En fait je m'étais déjà créé une classe qui permet de n'exécuter qu'une seule fois une application (comme la KUniqueApplication de KK).
Cette classe fonctionne avec un fichier de verrou qui contient le PID du programme. Si le PID ou le fichier de verrou n'existent pas le programme s'exécute.
C'est à ce moment là que le programme va créer un named pipe et lire à intervalles réguliers dedans.

Si le programme est exécuter une nouvelle fois (le fichier de verrou et PID existent) il va écrire dans le named pipe ses arguments puis quitter proprement.
Par contre les named pipes n'existent pas sous Windows a priori donc impossible de porter la classe.

7

Sous windows tu as des mailbox et tu as un equivalent des named pipes
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

8

9

C'est ce que fait Winzip par exemple hehe
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

10

Les Named Pipes existent parfaitement sous tout Windows moderne (mais pas sous 9x, en effet).
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

11

Par contre les named pipes n'existent pas sous Windows a priori donc impossible de porter la classe.
CreateNamedPipe

12

Windows Me/98/95:
Named pipes cannot be created.

Donc ça n'existe que sous Window$ NT, pas sous le Window$ original.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Kevin Kofler (./12) :
Windows Me/98/95:
Named pipes cannot be created.

Donc ça n'existe que sous Windows NT, pas sous les Windows 9x.


Au passage j'en serait pas si sur :/
Windows Me/98/95
: Pipe names cannot include a colon. Therefore, if this pipe will be used from a Windows Me/98/95 client, do not include a colon in the name.



(ps: j'ai passé le post de KK dans un correcteur de frappe)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

14

Hmmm en fait c'est parce que les pipes Windows sont accessibles au travers de SMB, ce qui permet de les utiliser comme moyen de communication réseau. Les Windows 9x sont capables de s'y connecter, mais pas d'en héberger.

\nomduserver[b]\pipe[/b]nomdupipe

15

pas mal, ça, quand même smile

d'ailleurs c'est pas comme ça que marche winpopup?

16

Je connais pas winpopup ^^

17

Il parle des popup admin qu'on peut envoyer/recevoir
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

18

19

Nop

Winpopup est l'implémentation d'un service qui est dans les NT datant de windows 3.1 et qui n'est présent que sur les 3.x et 9x vu que les NT 3.5x, NT4, W2k XP et autres vista ont un service dédié (impossible de me rapeller le nom par contre..)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

20

Concernant WinPopup/Le service: Le service porte le nom "Affichage des messages" (son nom système est "Messenger", et il se trouve dans la DLL msgsvc.dll utilisée par svchost.exe).
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.