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 № 1Penso 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?