Kód níže je také špatný!! Správný kód jako výše!!
Někdy musíme povolit spuštění pouze jedné instance aplikace a když proces začne, pokud zjistí, že nějaká instance aplikace běží, automaticky přestane běžet. Obvykle ji implementujeme v hlavní funkci pomocí mutexu Mutex, který je obvykle napsán:
Když hledáme odpovědi, často přicházíme a odcházíme ve spěchu, ignorujeme funkce a opatření Mutexu. Po jednoduchém testu, dobře, vezměte si ho a použijte. V tuto chvíli přehlížíme důležitý předpoklad:Mutex konvence pojmenování. Výše uvedená metoda psaní funguje bez problémů pod jedním uživatelem; Při multiuživatelském režimu může každý uživatel spustit jednu instanci, takže nelze zaručit jednu instanci.
Pokud ho potřebujete použít na terminálovém serveru a povolíte jen jednu instanci, použijte následující metodu:
Zde je popis MSDN:
Na serverech provozujících terminálové služby může mít pojmenovaný system mutex dvě úrovně viditelnosti. Pokud název začíná prefixem "Global\", mutex je viditelný ve všech relacích terminálového serveru. Pokud název začíná prefixem "Local\", mutex je viditelný pouze v relaci terminálového serveru, která jej vytvořila. V tomto případě může mít každá další relace terminálového serveru na serveru samostatný mutex se stejným názvem. Pokud vytvoříte pojmenovaný mutex bez specifikace předpony, vezme si prefix "Local\". V relaci terminálového serveru jsou dva mutexe s různými prefixy jmen nezávislými mutexy a oba mutexy jsou viditelné všem procesům v relaci terminálového serveru. To znamená, že předponové názvy "Global" a "Local" popisují rozsah názvu mutex vůči relaci terminálového serveru, nikoli vůči samotnému procesu.
|