Créer un pipe entre deux programmes

Fermé
M3NSONG3 Messages postés 605 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 - 14 mai 2019 à 21:27
Bonjour...

Je fais appel à vous aujourd'hui, car je suis comment dire... Totalement perdu.

Je vous expliquer brièvement mon cas : Je voudrais forcer le lancement d'un programme2(patcher) pour pouvoir lancer le programme1 (client). J'ai donc essayé de créer un pont entre les deux en utilisant pipe... J'ai essayé de mixer un peu les codes que je trouvais sur internet pour faire quelque chose... Mais c'est un peu la cata.

J'ai remarqué qu'en mettant et dans mon programme1 et dans le programme2 :
	HANDLE hPipe;
	char buffer[1024];
	DWORD dwRead;


	hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Work"),
		PIPE_ACCESS_DUPLEX,
		PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,   // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
		1,
		1024 * 16,
		1024 * 16,
		NMPWAIT_USE_DEFAULT_WAIT,
		NULL);
	
	while (hPipe != INVALID_HANDLE_VALUE)
	{
		if (ConnectNamedPipe(hPipe, NULL) != FALSE)   // wait for someone to connect to the pipe
		{
			while (ReadFile(hPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL) != FALSE)
			{
				/* add terminating zero */
				buffer[dwRead] = '\0';

				/* do something with data in buffer */
				LogBoxf("%s", buffer);
			}
		}

		DisconnectNamedPipe(hPipe);
		
	}


Mon programme2, se lance bien avec le programme1, et pas tout seul... Cependant il apparait un soucis: si le programme2 ne trouve pas de pipe, il reste ouvert... Et donc si quelqu'un en ouvre un deuxième, ils se "connectent" entre eux et s'ouvrent...

Je suppose qu'il faut complétement changer le code... Si quelqu'un avec un lien vers une doc qui pourrait m'aider dans ma tâche ?


Merci d'avance.
A voir également: