Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
11 / 11 / 9
Регистрация: 26.08.2011
Сообщений: 177

Запрет запуска второй копии и перезапуск

19.06.2016, 17:17. Показов 3231. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Пытаюсь реализовать запрет на запуск второй копии приложения. Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, L"f1ga2343h4bc3534fa");
        if(!hMutex)
            hMutex = CreateMutex(0, 0, L"f1ga2343h4bc3534fa");
        else
        {
            return 0;
        }
        Application->Initialize();
        Application->MainFormOnTaskBar = true;
        Application->CreateForm(__classid(TForm1), &Form1);
        Application->CreateForm(__classid(TForm2), &Form2);
        Application->Run();
    }
Ну тут собственно все стандартно, все прекрасно работает. Но в моем приложении есть еще одна функция, которая при необходимости его перезапускает:
C++
1
2
3
4
5
6
7
void progreload()
{
 
    ShellExecute(0,0,Application->ExeName.c_str(),0,0,SW_SHOW); // открываем новую копию
    Application->Terminate();   // закрываем старую
 
}
Соответственно эти функции друг с другом никак не дружат. Функция progreload закрывает приложение, а нового не запускает...
Подскажите как реализовать перезапуск приложения в моем случае?
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2016, 17:17
Ответы с готовыми решениями:

Запрет запуска копии второй формы
Здравствуйте. Опять возник извечный вопрос. Есть базовая Форма1. На ней кнопка запуска Форма2. Так вот сам вопрос. Как отследить,...

Запрет запуска второй копии приложения
Всем огромный привет!!!!:) Помогите пожалуйста! Как запретить запуск второй копии приложения?

Запрет запуска копии процесса
HWND hWnd; hWnd=::FindWindow(name,NULL); if (hWnd) { if (IsIconic(hWnd)) ShowWindow(hWnd,SW_RESTORE); ...

8
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
19.06.2016, 17:18
rozalski, передать новой копии в параметрах командной строки флаг "не смотри на мутекс "
0
11 / 11 / 9
Регистрация: 26.08.2011
Сообщений: 177
19.06.2016, 17:24  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
rozalski, передать новой копии в параметрах командной строки флаг "не смотри на мутекс "
Буду очень благодарен если покажете где и какой флаг надо выставить...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.06.2016, 17:56
Лучший ответ Сообщение было отмечено rozalski как решение

Решение

C++
1
ShellExecute(0,0,Application->ExeName.c_str(),L"/nomutex",0,SW_SHOW); // открываем новую копию
, соответственно, в приложении перед попыткой OpenMutex получать ParamStr(1) и если это /nomutex - то всю возню с мьютексами отменить...
2
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
19.06.2016, 17:58
volvo, да это и хотел сказать спасибо правда мутекс надо будет как то всеже создать наверное
0
11 / 11 / 9
Регистрация: 26.08.2011
Сообщений: 177
19.06.2016, 18:20  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
мутекс надо будет как то всеже создать наверное
Да как-то надо... пока туплю - как это будет выглядеть не могу сообразить
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
19.06.2016, 18:54
rozalski, создать перед перезапуском мутекс "пересменка", убить свой, даждаться его появления у копии, убить "пересменку". Для проверки копии проверять основной и пересменку
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.06.2016, 19:00
Лучший ответ Сообщение было отмечено rozalski как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
        HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, L"f1ga2343h4bc3534fa");
        if (!hMutex)
            hMutex = CreateMutex(0, 0, L"f1ga2343h4bc3534fa");
        else
        {
            if (ParamCount == 0 || ParamStr(1) != L"/nomutex")
                return 0;
        }
 
        Application->Initialize();
        // ...
1
11 / 11 / 9
Регистрация: 26.08.2011
Сообщений: 177
19.06.2016, 19:07  [ТС]
Все получилось! Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2016, 19:07
Помогаю со студенческими работами здесь

Связать перезапуск программы с защитой от повторного запуска
Всем доброго дня. Интересно выслушать советы по реализации такой вот задачи. Итак, что я имею Project.cpp #pragma hdrstop ...

Запрет запуска приложения
Люди помогите пожалуйста,нужно запретить запуск определенного приложения допустим *.exe(программно на с++\builder) Заранее блогодарен.

Запрет запуска второй копии
Здравствуйте, пытаюсь запретить запуск второй копии с активацией окна (вывода на передний план свернутого окна) program Project1; ...

Запрет запуска второй копии приложений
Нужно запретить запуск второй копии чужого приложения. Т.е. пользователь ткнул 5 раз на ярлык GTA5 в результате в процессе висит 2 GTA5,...

Запрет запуска второй копии приложения
Добрый вечер всем. Собственно говоря вопрос в теме. Гугл говорит, что нужно использовать qtsingleapplication. Только я не совсем понял как...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru