COMMUNICATION ENTRE INSTANCES

Résolu
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
-
Salut,

Je suis à cours d'idée. J'aimerais savoir comment faire pour récupérer des informations en provenance d'une (éventuelle) autre instance de mon application en cours de fonctionnement.

En fait, au début du logiciel l'utilisateur de log avec son 'Nom' et son 'Mot de Passe'.
Si une deuxième instance de l'appli est lancée, je souhaite épargner à l'utilisateur la douloureuser tâche de resaisir ses codes de connexion.

Merci d'avance.

Bonne prog ++

17 réponses

Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
Et voilà David, avec ça, ca devrait aller ^^

http://www.vbfrance.com/code.aspx?ID=39615

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
506
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
2
salut,

en fait tu as plrs solutions.
Concernant la communication entre applications, tu peux utiliser les msg windows ou les named pipes.
Il y a aussi la possibilité de taper dans la base de registre mais ce n'est pas tres propre

Enfin, tu peux interdire de lancer 2 instances de ton programmes mais ce n'est peut etre pas ce que tu cherches a faire...

Rollerman
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
A priori je ne vois qu'une seule solution, le fichier.
Un fichier au nom bien défini, à un amplcement bien défini, qui inclu toutes les variables que tu dois partager, et une variable qui compte le nombre d'instance en cours.

La première instance crée le fichier à l'ouverture, chaque nouvelle instance incrémente le nb d'instance à l'ouverture et le décremente à la fermeture. La dernière instance détruit le fichier (si évidenment tu ne souhaite pas garder les infos quand il n'y a plus d'instances en cours).
Regarde du coté des fichiers ini

Tu peux faire la même chose en utilisant la base de registre (sencée remplacer les fichiers ini, pretendus obsoletes par microsoft, mais toujours utilisés). Perso je préfere un bon fichier, à une manipulation de la bdr.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
Fichier physique, ou Names pipe, comme le suggère olixelle...

bref... il n'y a pas qu'un moyen de t'en sortir.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Merci de votre intérêt.

1°- Non je ne souhaite pas interdire le lancement de 2 instances. Renfield à d'ailleurs fait une très bonne source à ce sujet récemment.

2°- Au niveau de la BDR, j'y ai bien pensé (tout comme le .ini) mais comme dis Olixelle "ce n'est pas très propre". Surtout que s'y la première instance plante, elle n'effacera pas les données et on pourra ainsi lancer autant d'instance que l'on veut sans se relogger.

3°- En fait mon objectif est de récupérer les codes utilisés lors de la premiere connexion, afin que la seconde instance utilise les mêmes.

4°- Olixelle, peux tu m'en dire plus sur les messages Windows.

Bonne prog ++
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Renfield, tu m'as devancé ^^

Sinon qu'est ce que les Named Pipes.

Bonne prog ++
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
en gros... des "fichiers virtuels" auxquels tu peux accéder en lecture/ecriture...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
506
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
2
pour revenir sur les msgs windows apres reflexion ce n'est peut etre pas le mieux car tu serais obligé d'envoyer tes msg en broadcas ce qui n'est pas tres propre non plus....


Concernant les named pipes regarde ca: http://support.microsoft.com/?kbid=177696

Rollerman
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Merci pour l'info. J'ai regardé le lien mais je ne pige pas tout très bien.

Voici quelques questions :

- Un autre programme peut-il connaitre l'existance de mon 'Named Pipe' ? (quid de la sécurité)
- Si l'instance qui a créé le 'Named Pipe' plante, que devient ce dernier ? Il disparait ?
- Auriez-vous d'autres exemples, un peu plus simple ?

Merci
Bonne prog
++
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
Ici n'est mentionné qu'un exemple des technos qu'il est possible de mettre en oeuvre, pour communiquer entre plusieurs process...

en voici d'autres :

- Fichiers
- Presse-papier
- WM_COPYDATA
- Sockets
- RPC
- Mailslots
- Pipes
- DDE
- Mappage mémoire

j'ignore finallement si le Pipe est une bonne solution ici. En effet, comme son nom l'indique, c'est juste un tuyau... et si personne n'est à l'autre bout, l'info est perdue. par definition, dans ton cas, tu n'as très probablement 'personne' à l'autre bout...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Que me conseil tu dans ce cas ? Quelle serait la solution la plus adaptée selon toi ?

Je vais essayer de préciser un peu mieux mon projet :


Lorsqu'un utilisateur lance l'appli, on lui demande son Login et mot de passe pour se connecter à une base de données Access.
Il a cependant la possibilité de lancer une deuxième (ou +) instance (je tiens à garder cela).
Et je souhaite donc (comme dis plus haut) épargner à l'utilisateur déjà loggé de ressaisir son login et MDP. Mais pour le bon fonctionnement du logiciel (traçage de l'activité) j'ai besoins que ma deuxième instance connaisse quel login et MDP ont été utilisés.

Bonne prog ++
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Salut,

Eh le plus simple serait de mettre une option sur le programme pour relancer une nouvelle instance, instance que tu lance avec le passe et le UserName en ligne de commande...

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Hum, l'idée n'est pas bête, mais malheureusement cela ne fonctionnera pas dans mon cas car il est lui même lancé par une autre programme.

Merci quand même pour l'idée.

Bonne prog ++
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Merci beaucoup, c'est génial !

Le seul problème est que si l'instance qui ajoute une info se termine sans la supprimer (ex : plantage) cette info persiste pour les futures instances...

J'ai donc ajouter un bout de code qui supprime toutes les valeurs au début du programme si  App.PrevInstance = False

Bonne prog
++
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
pas testé si ca plante.... je l'avoue

je en mettrais pas App.PrevInstance.... vu que ca fonctionne entre plusieurs programmes (pas forcément plusieurs instances)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
73
.... je n'arrive pas a reproduire ce que tu décris...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019
1
Compile ton projet et nomme le toto.exe, puis lance toto.exe 2 fois

Sur la premiere instance tu modifie la premiere textbox. Ecrit par exemple "Salut". Puis tu ferme cette fenetre.
Puis sur la fenetre qui reste tu clic sur lire ...

Je ne sais pour quelle raison, ceci ne se produit pas lorsque la deuxieme instance est lancée après la fermeture de la première.

Bonne prog ++