Poniższy kod też jest błędny!! Poprawny kod jak wyżej!!
Czasami musimy pozwolić na uruchomienie tylko jednej instancji aplikacji, a gdy proces się uruchomi, jeśli wykryje, że jakaś instancja aplikacji działa, automatycznie przestaje działać. Zazwyczaj implementujemy ją w funkcji głównej za pomocą mutexu Mutex, który zwykle jest zapisany:
Gdy szukamy odpowiedzi, często przychodzimy i odchodzimy w pośpiechu, ignorując funkcje i środki ostrożności Mutex. Po prostym teście, OK, weź to i używaj. W tym momencie pomijamy ważny warunek wstępny:Konwencje nazewnictwa mutex. Powyższa metoda zapisu działa bez problemów przy użyciu jednego użytkownika; W trybie wieloużytkownikowym każdy użytkownik może uruchomić jedną instancję, więc nie można zagwarantować istnienia jednej instancji.
Jeśli musisz używać go na serwerze terminalowym i pozwalasz tylko na jedną instancję, użyj następującej metody:
Oto opis MSDN:
Na serwerach uruchamiających usługi terminalowe, nazwane system mutex mogą mieć dwa poziomy widoczności. Jeśli nazwa zaczyna się od prefiksu "Global\", mutex jest widoczny we wszystkich sesjach serwera terminala. Jeśli nazwa zaczyna się od prefiksu "Local\", mutex jest widoczny tylko w sesji serwera terminala, która go utworzyła. W takim przypadku każda sesja serwera terminala na serwerze może mieć osobny mutex o tej samej nazwie. Jeśli utworzysz nazwany mutex bez określenia prefiksu, przyjmie on prefiks "Local\". W sesji serwera terminalowego dwa mutexy o różnych prefiksach nazw są niezależnymi mutexami, a oba mutexy są widoczne dla wszystkich procesów w sesji serwera terminala. Oznacza to, że nazwy prefiksów "Global" i "Local" opisują zakres nazwy mutex względem sesji serwera terminala, a nie samego procesu.
|