Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для 12maks08
0 / 0 / 0
Регистрация: 30.10.2024
Сообщений: 16

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

31.10.2024, 22:09. Показов 2268. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал через mutex, но после добавления ещё больше Label, mutex перестал работать, пришлось перейти на process.
Так вот вопрос, как можно реализовать, то бы если программа запускается 2 раз, новая программа не запускалась, а старая выводилась на передний план(становилась активной)?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Process process = Process.GetCurrentProcess();
            Process[] procList = Process.GetProcesses();
            int schet_process = 0;
            for (int i = 0; i < procList.Length; i++)
            {
                if (process.ProcessName.ToString() == procList[i].ProcessName.ToString())
                {
                    schet_process++;
                }
            }
            if (schet_process <= 1)
            {
                Application.Run(new Form1());
            }
            else
            {
                MessageBox.Show("Программа уже запущена", "Уведомление");
                Application.Exit();
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2024, 22:09
Ответы с готовыми решениями:

Запретить создание второго экземпляра формы
Как запретить создание 2-ого экземпляра формы? при создании 2 просто передавать фокус на созданную. Добавлено через 12 минут Еще...

Запретить запуск программы с диска C
Добрый день, уважаемые форумчане. Вообщем нужно запретить запуск программы с системного диска или любого другого.

Запретить запуск программы
а как запретить запуск программы даже первый раз? т.е. чтоб программа вобще не запускадась Не нужно задавать свои вопросы в чужих темах

28
 Аватар для 12maks08
0 / 0 / 0
Регистрация: 30.10.2024
Сообщений: 16
01.11.2024, 14:16  [ТС]
Студворк — интернет-сервис помощи студентам
Andrey-MSK, да в этом и была проблема, но программа вообще не запускается

Добавлено через 13 минут
roach1967,
Ну я понял в чем проблемы была, но все равно открывает новый экземпляр
0
 Аватар для 12maks08
0 / 0 / 0
Регистрация: 30.10.2024
Сообщений: 16
02.11.2024, 14:28  [ТС]
roach1967, почему то hWnd из FindWindow возвращает 0
0
 Аватар для Andrey-MSK
3371 / 2257 / 388
Регистрация: 14.08.2018
Сообщений: 7,647
Записей в блоге: 4
02.11.2024, 14:46
12maks08, Покажите код, что вы там наваяли...
0
 Аватар для 12maks08
0 / 0 / 0
Регистрация: 30.10.2024
Сообщений: 16
02.11.2024, 14:59  [ТС]
Andrey-MSK, бошку уже сломал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Windows.Forms.VisualStyles;
using System.Runtime.InteropServices;
using System.Threading;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Security.Principal;
using System.Globalization;
 
namespace WindowsFormsApplication1
{
    static class Program
    {
        [DllImport("User32.dll")]
        private static extern int FindWindow(String ClassName, String WindowName);
 
        [DllImport("User32.dll")]
        private static extern IntPtr SetForegroundWindow(int hWnd);
 
        [DllImport("User32.dll")]
        static extern bool ShowWindow(int hWnd, int status);    
 
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
 
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            int hWnd = FindWindow(null, "Form1");
            MessageBox.Show(hWnd.ToString(), "уведомление");
            if (hWnd > 0)
            {
                SetForegroundWindow(hWnd);
                ShowWindow(hWnd, 1);
            }
            else
            {
                Application.Run(new Form1());
            }
        }
    }
}
Вместо "int hWnd = FindWindow(null, "Form1"); "
Form1 пробовал и WindowsFormsApplication1 и название сборки и пространство имён и process.ProcessName
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3453 / 2774 / 575
Регистрация: 04.09.2018
Сообщений: 8,725
Записей в блоге: 3
02.11.2024, 15:19
Лучший ответ Сообщение было отмечено 12maks08 как решение

Решение

12maks08, это пробовал:
SingleInstance_demo.zip
0
 Аватар для Andrey-MSK
3371 / 2257 / 388
Регистрация: 14.08.2018
Сообщений: 7,647
Записей в блоге: 4
02.11.2024, 15:23
12maks08, Работает в NET Framework 4.7.2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    internal static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            if (SingleInstance.AlreadyRunning())
            {
                Application.Exit(); // Just shutdown the current application, if any instance found.
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }
 
    public class User32API
    {
        [DllImport("User32.dll")]
        public static extern bool IsIconic(IntPtr hWnd);
 
        [DllImport("User32.dll")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);
 
        [DllImport("User32.dll")]
        public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
 
        public const int SW_RESTORE = 9;
    }
 
    public sealed class SingleInstance
    {
        public static bool AlreadyRunning()
        {
            bool running = false;
 
            try
            {
                // Getting collection of process  
                Process currentProcess = Process.GetCurrentProcess();
 
                // Check with other process already running   
                foreach (var p in Process.GetProcesses())
                {
                    if (p.Id != currentProcess.Id) // Check running process   
                    {
                        if (p.ProcessName.Equals(currentProcess.ProcessName) == true)
                        {
                            running = true;
                            IntPtr hFound = p.MainWindowHandle;
 
                            if (User32API.IsIconic(hFound))
                            {
                                User32API.ShowWindow(hFound, User32API.SW_RESTORE); // If application is in ICONIC mode then 
                            }
 
                            User32API.SetForegroundWindow(hFound); // Activate the window, if process is already running
 
                            break;
                        }
                    }
                }
            }
            catch
            {
 
            }
 
            return running;
        }
    }
}
0
dive
 Аватар для I can
4990 / 4750 / 850
Регистрация: 13.04.2015
Сообщений: 9,990
02.11.2024, 15:52
В Барсике есть такая опция(на скрине), работает так, как написано в стартовом топике. Наверняка эта настройка хранится где-то. Будет время, на досуге посмотрю, как это сделано.
0
dive
 Аватар для I can
4990 / 4750 / 850
Регистрация: 13.04.2015
Сообщений: 9,990
02.11.2024, 16:02
В Application.Designer такой код. Да, вряд ли поможет, это наверное сугубо бейсиковская фича.
Миниатюры
Запретить запуск второго экземпляра программы  
0
 Аватар для 12maks08
0 / 0 / 0
Регистрация: 30.10.2024
Сообщений: 16
06.11.2024, 09:34  [ТС]
wizard41,
Спасибо это помогло)

Добавлено через 1 минуту
I can,
у меня Visual Studio 2012
Такой настройки нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2024, 09:34

Как запретить повторный запуск программы
При загрузке формы запретить запуск этой формы еще раз , допустим что бы выводило &quot;Это программа уже запущена!&quot;.

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

Как запретить запуск программы без наличия определенной флешки?
Как сделать так, что бы без вставленной определенной флешки, программа не запускалась???

Как запретить запуск второй копии программы при этом сохранить аргументы?
Стало быть очень интересно, есть программа которая должна работать в единственном экземпляре. Это я сделал. Но теперь нужно как-то...

Запретить запуск второго экземпляра программы
как сделать, чтобы прогу можно было запустить только один раз при повторном запуске выскакивало сообщение: &quot;Программа уже...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru