Permettere l'avvio di più processi su differenti istanze utente

giovedì 29 agosto 2013 - 10.52
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010

marco.morgia Profilo | Junior Member

Ciao,

ho creato una desktop application in WPF e C# che dovrà essere installata su ogni client che ne richieda l'utilizzo.
Nella mia applicazione, a prevenzione che il programma venga lanciato 2 volte, ho inserito un controllo che mi impedisce di lanciare il programma se è già in esecuzione.

int procName = Process.GetCurrentProcess().Id;
Process processes = Process.GetProcessById(procName);

if (processes.ToString().Length > 1)
{

System.Windows.Application.Current.Shutdown();
}

Come si può ben vedere quello che faccio è un semplice controllo sui processi.

Il problema nasce quando voglio utilizzare una configurazione di tipo terminal server, dove il pc fisico dove risiede il programma è 1 e gli utenti che si connettono alle proprie "sessioni" possono essere molteplici.
In questo caso il discorso di non lanciare processi multipli mi causa dei problemi, perché se è vero che ogni utente ha la sua propria sessione,ma i processi della macchina sono in comune. Quindi se un utente lancia il suo programma, gli altri non possono.

Quello che vorrei io è che rimanga sempre il controllo per non lanciare più processi da parte dello stesso utente, ma che in situazioni di terminal server il programma possa essere lanciato più volte andando magari a controllare chi è l'utente che ha lanciato l'applicazione.

Ovviamente fare 2 versioni del programma ( una per desktop classico e una per terminal server ) è fuori questione.

Qualcuno sa aiutarmi

Vash Profilo | Junior Member

ciao,

prova con questo:

bool createdNew; Mutex m = new Mutex(true, "NomeApplicazione", out createdNew); if (!createdNew) { // Applicazione già in esecuzione ... MessageBox.Show("NomeApplicazione è già in esecuzione!", "Istanze multiple"); this.Close(); }

dovrebbe funzionare sia in terminal che non.

ciao

marco.morgia Profilo | Junior Member

Ciao,

ho provato, ma purtroppo parte sempre, anche se lo lancio più volte dallo stesso pc ( con lo stesso utente )

Vash Profilo | Junior Member

in effetti mi funziona solo se non tocco nulla della videata: ho fatto male il test.

prova questo, ho fatto dei test e va bene:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

... e la chiamata da fare all'avvio dell'applicazione:
if (MyProcess() != null) { MessageBox.Show("WpfLocalizeTest è già in esecuzione!", "Istanze multiple"); this.Close(); }

ciao

marco.morgia Profilo | Junior Member

Perfetto,

è quello che cercavo.


Grazie mille

Vash Profilo | Junior Member

Benissimo!
Grazie a te.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5