Kód nižšie je tiež nesprávny!! Správny kód ako vyššie!!
Niekedy musíme povoliť spustenie len jednej inštancie aplikácie a keď sa proces spustí, ak zistí, že inštancia aplikácie beží, automaticky prestane bežať. Zvyčajne ho implementujeme v hlavnej funkcii cez mutex mutex, ktorý je zvyčajne napísaný:
Keď hľadáme odpovede, často prichádzame a odchádzame v zhone, ignorujúc funkcie a opatrenia Mutexu. Po jednoduchom teste, dobre, vezmi si to a použi. V tomto bode prehliadame dôležitú podmienku:Mutex konvencie pomenovania. Vyššie uvedená metóda písania funguje bez problémov pod jedným používateľom; Pri multi-user režime môže každý používateľ začať jednu inštanciu, takže jedna inštancia nie je zaručená.
Ak ho potrebujete použiť na terminálovom serveri a povoliť len jednu inštanciu, použite nasledujúcu metódu:
Tu je popis MSDN:
Na serveroch bežiacich terminálové služby môže mať pomenovaný systémový mutex dve úrovne viditeľnosti. Ak názov začína prefixom "Global\", mutex je viditeľný vo všetkých reláciách terminálového servera. Ak názov začína prefixom "Local\", mutex je viditeľný iba v relácii terminálového servera, ktorá ho vytvorila. V takom prípade môže mať každá relácia terminálového servera na serveri samostatný mutex s rovnakým názvom. Ak vytvoríte pomenovaný mutex bez špecifikácie predpony, preberie prefix "Local\". V relácii terminálového servera sú dva mutexy s rôznymi prefixmi mena nezávislými mutexmi a tieto dva mutexy sú viditeľné všetkým procesom v relácii terminálového servera. To znamená, že prefixové názvy "Global" a "Local" opisujú rozsah názvu mutex vzhľadom na reláciu terminálového servera, nie voči samotnému procesu.
|