Egyetlen példányban futó alkalmazás

Vannak felhasználói alkalmazások ahol fontos lehet, hogy egyszerre csak egyet lehessen elindítani belőlük. Tervezői ilyennek ítélték például a Winampot, vagy a uTorrent-et. De hogyan tegyük saját alkalmazásunkat "egypéldányossá" könnyen?

Először is gondold végig, hogy mennyire "egypéldányosra" szeretnéd:

  • a teljes rendszerben legfeljebb egy darab futhasson belőle
  • vagy pedig terminal server sessionönként egy darab?

Utána ennek megfelelően hozzál létre egy nevesített Mutexet. A nevesített Mutex "globális" tud lenni, azaz alkalmas alkalmazáshatárok közötti szinkronizációra. Az, hogy mennyire "globális" a nevétől függ:

"On a server that is running Terminal Services, a named system mutex can have two levels of visibility. If its name begins with the prefix "Global\", the mutex is visible in all terminal server sessions. If its name begins with the prefix "Local\", the mutex is visible only in the terminal server session where it was created. In that case, a separate mutex with the same name can exist in each of the other terminal server sessions on the server. If you do not specify a prefix when you create a named mutex, it takes the prefix "Local\". Within a terminal server session, two mutexes whose names differ only by their prefixes are separate mutexes, and both are visible to all processes in the terminal server session. That is, the prefix names "Global\" and "Local\" describe the scope of the mutex name relative to terminal server sessions, not relative to processes ."

Egy egyszerű winforms példán keresztül :

static void Main( string[] args )
{
    // http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx
    Mutex systemWide = new Mutex( false, @"Local\EgyediNev" );
    if( systemWide.WaitOne( 0, false ) )
    {
        Application.Run( new MainForm() );
    }
    systemWide.Close();
}

Nem winformsra átalakításkor annyit kell figyelembevenni, hogy az Application.Run() blokkol, amíg le nem zárják a főablakot (ezesetben a MainForm példányt).



Dávid Zoltán

Dávid Zoltán Mérnök Informatikusként végeztem a BME-n, jelenleg webfejlesztéssel és gépi tanulással foglalkozom.

2008.10.28. 16:15:34 | Permalink | Hozzászólások: 0 | Tárgyszavak: , ,


  • Futási jog tömeges megadása tárolteljárásokra

    Dávid Zoltán Sajnos már többször megtörtént velem, hogy fejlesztés közben folyamatosan születnek az új tárolteljárások, és én nem készítek semmilyen szkriptet, amivel telepítéskor egy adott felhasználónak vagy adatbázis-szerepkörnek futtatási jogot tudnék adni ezekre a tárolteljárásokra. Ezt a futtatási jogot elég könnyen meg lehet adni pipálgatással, ha kevés tárolteljárásunk van. De mondjuk néhányszáz tárolteljárást már nincs kedvem végigpipálgatni. Ráadásul mi van ha elfelejtem. Meg egyáltalán szkriptekre szükség van! Tovább »
  • Egyetlen példányban futó alkalmazás

    Dávid Zoltán Vannak felhasználói alkalmazások ahol fontos lehet, hogy egyszerre csak egyet lehessen elindítani belőlük. Tervezői ilyennek ítélték például a Winampot, vagy a uTorrent-et. De hogyan tegyük saját alkalmazásunkat "egypéldányossá" könnyen? Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások