/ / Usa mutext per rilevare e chiamare il processo avviato - c #, mutex

Usa mutext per rilevare e chiamare il processo avviato - c #, mutex

Come posso usare mutex per trovare il primo processo tramite GUID e chiamare la funzione in esso? Come nel browser Web quando si tenta di avviarlo una seconda volta, si apre una nuova finestra.

// appGuid is const string containing app GUID
using (Mutex mutex = new Mutex(false, "Global\" + appGuid))
{
if (!mutex.WaitOne(0, false))
{
// CODE TO FIND AND CALL FIRST PROCESS AND THEN EXIT
Environment.Exit(0);
}
else
{
App app = new App();
app.InitializeComponent();
app.Run();
}
}

risposte:

1 per risposta № 1

Penso che ci siano molti modi per affrontare il "oh hai aperto una seconda istanza, ma ne consentiamo solo una, quindi lasciamo la tua richiesta in proxy alla prima istanza"problema.

  • È possibile che il processo host sia in ascolto su asocket e quando il mutex rileva che è già stato aperto, chiama nel socket di ascolto. Forse usa qualcosa di semplice come il remoting .NET, non c'è davvero bisogno di andare in piena regola qui WCF o scrivere raw socket
  • Potresti anche avere un buffer di memoria condiviso e scrivere usando la memoria condivisa. Ma ciò richiederà la sincronizzazione tra i due processi, quindi può essere un po 'disordinato
  • È possibile semplicemente attivare un file e fare in modo che il processo host sia in ascolto degli eventi dei file in una posizione nota. Questa è probabilmente la soluzione più semplice e meno tecnologica

Queste sono 3 idee, probabilmente ce ne sono altre

Ma se vuoi semplicemente ottenere informazioni sul processo, perché non cercare semplicemente il processo nome?