Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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 мають сірий колір
Наступний:Програми C# дозволяють виконувати правильний код лише одному екземпляру
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com