Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
4 / 4 / 1
Регистрация: 15.03.2019
Сообщений: 676

Запускать только один экземпляр приложения на одного пользователя

04.06.2025, 16:32. Показов 2338. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет

кто подскажет

необходимо сделать так, если приложение у этого пользователя уже запущено то при попытке запустить его еще раз просто развернуть текущее

я делал это так


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static class Program
{
 
 /// <summary>
 /// The main entry point for the application.
 /// </summary>
 [STAThread]
 static void Main()
 {
 
if (Process.GetProcesses().Select(x => x.ProcessName).Count(s => s == Process.GetCurrentProcess().ProcessName) > 1)
{
 
return;
 
}    
 
}
}
это работало для меня но!

когда приложение установлено на сервер терминалов РДП

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

как решить дилемму?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.06.2025, 16:32
Ответы с готовыми решениями:

Как сделать только один экземпляр приложения?
Как мне сделать только один экземпляр приложения? К примеру у меня программа висит в трее, и если я...

Как в случае с Dependency Injection внедрять отдельный экземпляр некоторого класса только лишь для одного другого класса
Здравствуйте, пытаюсь понять как же всё таки правильно использовать Dependency Injection в случае c...

Не удалось сформировать пользовательский экземпляр SQL Server из-за ошибки при запуске процесса для экземпляра пользователя
Всем привет. В названии темы сама загвоздка. Перепробовал вроде бы уже всё....

23
08.06.2025, 15:15
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от Midian Посмотреть сообщение
чем плох Kill()
Для начала Kill -- асинхронный. Т.е. код после него может отработать, а может не отработать. Не уверен, но вроде Kill не даст возможности отработать деструкторам, что вот вообще не самая ожидаемая вещь. Ну и в целом это из разряда "выдернуть системник из розетки" -- вроде то что задумано делает, но раз в столетие может чего-то сгореть.

Если говорить об общем подходе, то что Kill, что Exit -- резкое неконтролируемое завершение программы. Т.е. запускаешь какой-то метод, а тут весь апликейшен такой "пока-пока, я больше не сотрудничаю".

Касаемо задачи ТСа, то проверка на работающую копию должна быть до любой движухи в коде в принципе. Сначала чекаем процессы на дубль, а только потом в начинаем разворачивать апликейшен, подписываться на событие и всё такое.

Плюс у ТСа так-то WinForms, он стартует с консольного Program.Main, там априори нет никаких ивентов.

0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
09.06.2025, 15:57
Цитата Сообщение от Sanya2019 Посмотреть сообщение
if (Process.GetProcesses().Select(x => x.ProcessName).Count(s => s == Process.GetCurrentProcess().ProcessName) > 1)
Жесткач
Имя процесса, вообще-то, будет одинаковым для всех пользователей, поэтому смысла в этой проверке нет.
Проще всего при старте сразу определять OwnerInfo (кто запустил процесс) через ManagementObjectSearcher и затем смотреть кто в данный момент залогинен. Если это тот же самый юзверь, то выходить из void Main() еще до старта Application.Run() (ну или что там у тебя в качестве приложения/сервиса..)
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.06.2025, 19:28
Цитата Сообщение от wizard41 Посмотреть сообщение
поэтому смысла в этой проверке нет.
Это проверка "есть ли ещё запущенный процесс с таким именем" из общего доступного списка. Смысл есть, но я бы делал через Mutex с динамическим именем $"{AppName}{UserID}".
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
09.06.2025, 21:12
Wolfdp, Mutex можно, но это более "тяжелое" решение для задачи ТСа.
И тут действительно все будет зависеть от того, в каком скопе проверяется наличие процесса (от имени какого пользователя).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2025, 21:12

Один экземпляр программы
Добавлено через 43 минуты Если программа запущена, как сделать чтобы второй раз её нельзя было...

Args и один экземпляр
Делаю аудио плеер. И столкнулся с такой ситуацией: 1. Нужно открывать файл программой просто...

Как можно использовать один класс экземпляр класса наследуемого от DbContext'a?
Проблема в том, что на почти каждой форме я создаю новый экземпляр класса. Преподаватель...

Закрепить за одним пользователем только один компьютер
Есть 3 таблицы , Сотрудники, компьютеры, Движение вычислительной техники. В таблице движение...

Как сделать авторизацию двух пользователей причем один имеет доступ ко всему, а второй только к одной форме?
Пожалуйста помогите Добавлено через 8 часов 46 минут Windows Worm c#


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru