Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 19013|Ответ: 0

[Источник] C# позволяет правильно записывать только одну экземпляр приложения

[Скопировать ссылку]
Опубликовано 10.12.2016 14:35:34 | | |
Программы C# позволяют выполнять правильный код только одному экземпляру
http://www.itsvse.com/thread-3391-1-1.html
(Источник: Architect)


Код ниже тоже неверен!! Правильный код, как выше!!


Иногда нужно позволить запуск только одному экземпляру приложения, и при запуске процесса, если обнаруживается, что один экземпляр приложения запущен, он автоматически останавливается. Обычно мы реализуем его в функции Main через мьютекс Mutex, который обычно записывается следующим образом:

Когда мы ищем ответы, мы часто приходим и уходим в спешке, игнорируя особенности и меры предосторожности Mutex. После простого теста, хорошо, возьмите и используйте. На данном этапе мы упускаем из виду важное условие:Конвенции наименования mutex. Вышеуказанный метод записи работает без проблем при одном пользователе; При многопользовательском режиме каждый пользователь может запустить одну экземплярию, поэтому один экземпляр не может быть гарантирован.

Если вам нужно использовать его на терминальном сервере и разрешать только одну экземпляр, используйте следующий способ:


Вот описание MSDN:


На серверах, использующих терминальные сервисы, именованный системный мьютекс может иметь два уровня видимости. Если имя начинается с префикса «Global\», мьютекс виден во всех сессиях терминального сервера. Если имя начинается с префикса «Local\», мьютекс виден только в сессии терминального сервера, который его создал. В этом случае каждая сессия терминального сервера на сервере может иметь отдельный мьютекс с таким же именем. Если создать именованный мьютекс без указания префикса, он возьмёт префикс «Local\». В сессии терминального сервера два мьютека с разными префиксами названия являются независимыми мьютексами, и два мьютекса видны всем процессам сессии терминального сервера. То есть префиксы «Global» и «Local» описывают диапазон имени mutex относительно сессии терминального сервера, а не процесса.






Предыдущий:Регистрационные компоненты для COM interop серыми
Следующий:Программы C# позволяют выполнять правильный код только одному экземпляру
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com