Controllo applicazione già aperta

venerdì 04 dicembre 2009 - 10.19

drigo83 Profilo | Senior Member

Ciao a tutti, qualcuno mi sa dire come si fa in VB.NET a controllare se una applicazione è già aperta, in modo che non si apra 2 volte?

Grazie
Andrea

AntCiar Profilo | Expert

Ciao.

inserisci questo codice nella classe program (se stai scivendo in C#)

static bool PrevInstance()
{
Process pcur = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcesses())
{
if (pcur.Id != p.Id)
{
if (pcur.ProcessName.ToUpper() == p.ProcessName.ToUpper())
{
if (pcur.SessionId.ToString().ToUpper() == p.SessionId.ToString().ToUpper())
{
return false;
}
}
}
}
return true;
}



poi nel Main scrivi

if (!PrevInstance())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Start(new Form1());
}
else
{
MessageBox.Show("Applicazione già aperta");
}


ciao

Cristian Barca

drigo83 Profilo | Senior Member

Sto scrivendo in VB...va bene uguale?

AntCiar Profilo | Expert

Ovviamente NO.

questo è il codice tradotto.
Inseriscilo nella form principale (quella che parte all'avvio dell'applicazione)

Public Shared Function PrevInstance() As Boolean
Dim pcur As Process = Process.GetCurrentProcess()
Dim p As Process

For Each p In Process.GetProcesses()
If pcur.Id <> p.Id Then
If pcur.ProcessName.ToUpper().Equals(p.ProcessName.ToUpper()) Then
If pcur.SessionId.ToString().ToUpper().Equals(p.SessionId.ToString().ToUpper()) Then
Return False
End If
End If
End If
Next
Return True
End Function


poi nella form principale nell'evento Load scrivi

if "nomeFormPrincipale".PrevInstance() = false
me.close()
end if

Cristian Barca

drigo83 Profilo | Senior Member

Mi dice che SessionId non è un membro di System.Diagnostic.Process

MarKonE Profilo | Guru

Ciao,

per applicazione intendi un processo generico o proprio l'applicazione VB che stai sviluppando ?


My Blog... http://blogs.dotnethell.it/Mark/

drigo83 Profilo | Senior Member

L'applicazione che sto sviluppando

AntCiar Profilo | Expert

Ciao. Ti ho allegato un esempio. Compilalo e poi vai nella cartella bin\debug avvia l'exe e poi tenta di avviarne un altro e ti dirà che già è in uso.
Cristian Barca

MarKonE Profilo | Guru

Tra le proprietà del progetto seleziona il flag RENDI A ISTANZA SINGOLA.

Et voilà


CIAO !

My Blog... http://blogs.dotnethell.it/Mark/
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5