The Lone Programmer

Blog o programiranju i dizajniranju aplikacija sa .NET i C# tehnologijama …

Kako omogućiti da u sistemu postoji samo jedna instanca aplikacije?

Posted by Denis Biondic on juli 6, 2009

Ovo je jedan od veoma dobrih primjera koliko programiranje nekad može biti zanimljivo :)) Kao jedno od rješenja, može se upotrijebiti Mutex klasa.

Ovo se može uraditi ako pri svakom pokušaju pokretanja aplikacije provjerimo da li ima ijedna instanca iste aplikacije u sistemu (logično, naravno). Problem nastaje kako to realizirati. Treba nam neki način “signaliziranja”, način da drugim aplikacijama kažemo da je jedna instanca već pokrenuta.
Jednostavno rješenje nudi Mutex, koji predstavlja process-wide lock mehanizam u .NET-u (isto kao i lock – tj. Monitor.Enter() i Monitor.Exit() ). Registrovani Mutex objekat, pod nekim nazivom, je vidljiv u cjelom sistemu – i sve aplikacije mu mogu pristupiti. Ovo možemo iskoristiti tako da unutar Main() metode pri startanju aplikacije provjerimo da li ima Mutex pod istim nazivom već registrovan:


static class Program
{
    // Mutex objekat pravimo statičnim da ga GC ne preuzme.
    // Isto možemo postići da na kraju Main() metode pozovemo
    // GC.KeepAlive(mutex)
    static Mutex mutex = new Mutex(false, "nazivKompanije url bla bla");

    [STAThread]
    static void Main()
    {
        // sačekati par sekundi u slučaju da se upravo gasi
        // druga instanca
        if (!mutex.WaitOne(TimeSpan.FromSeconds(2), false))
        {
            MessageBox.Show("Aplikacija je već "  +
                            "pokrenuta!", "", MessageBoxButtons.OK);
            return;
        }
        
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        finally { mutex.ReleaseMutex(); }
    }
}

Što se tiče samog nazivanja Mutex objekta, pokušajte staviti naziv za koji ćete biti sigurni da niti jedna druga aplikacija neće koristiti – obično string sastavljan od naziva aplikacije, naziva kompanije, url-a kompanije itd…

Jedan odgovor __ “Kako omogućiti da u sistemu postoji samo jedna instanca aplikacije?”

  1. beli je rekao/la

    Ja sam se takodje bavio programiranjem dok nisam poceo da radim kao savetnik za informatiku. Cesto sam naletao na problem tipa kako omoguciti da u sistemu postoji samo jedna instanca aplikacije. Ovo tvoje resenje mi se stvarno svidja. Bravo.


    Suchmaschinenoptimierung

Ostavi odgovor

XHTML: Možete koristiti sljedeće tagove: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>