Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151

Как корректно закрыть собственную программу из другого процесса?

18.07.2019, 11:21. Показов 1445. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется запущенная программа prog.exe:
Нужно при запуске другой копии prog.exe с ключем /exit, проверить работает ли первая копия и в случае истины корректно ее закрыть.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.07.2019, 11:21
Ответы с готовыми решениями:

Как корректно закрыть программу
Доброго времени суток! У меня такая проблема: запускаю программу, открываю кнопкой вторую форму, потом с неё перехожу обратно и...

Как как корректно закрыть другую программу из своей?
Подскажите плиз как корректно закрыть другую программу из своей которая после посылки ей сообщения SendMessage(hWnd1,WM_CLOSE,0,0); ...

Как закрыть свою программу при запуске определенного процесса?
Нужно чтобы при запуске определенного процесса, закрывалась моя программа. То есть у меня запущено мое приложение, если запускается...

14
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.07.2019, 11:50
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Нужно при запуске другой копии prog.exe с ключем /exit, проверить работает ли первая копия и в случае истины корректно ее закрыть.
Воспользуйся именованным событием.
В рабочем экземпляре сделай CreateEvent(.... "Имя события") и когда это событие взведётся выходи.
Там, где проверяешь /exit сделай OpenEvent и SetEvent
1
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
18.07.2019, 12:00  [ТС]
Спасибо:
1. когда это событие взведётся - как понять?
2. Может есть примерЫ кода?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.07.2019, 12:04
Цитата Сообщение от FreakMurderer Посмотреть сообщение
1. когда это событие взведётся - как понять?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HANDLE hEventExit = ::CreateEventW(NULL, TRUE, FALSE, L"MyExitEvent");
....................
 
main()
{
    for (;;)
   {
....................................
         if (::WaitForSingleObject(hExitEvent, 0) != WAIT_TIMEOUT)
              return 0;
........................
    }
}
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
18.07.2019, 12:09  [ТС]
Ясно, у меня в коде также используется данный цикл:
C++
1
2
3
4
while (WM_QUIT != msg.message) {
        bGotMsg = (PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE) != 0);
......
}
А также имеется проверка через мутексы при запуске:
C++
1
2
3
4
HANDLE hHandle = CreateMutex(NULL, TRUE, "szUniqueNamedMutex");
    if (ERROR_ALREADY_EXISTS == GetLastError()) {
        ExitProcess(1);
    }
Вообщем, может как то использовать уже имеющийся код или все-таки через ваш совет лучше?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.07.2019, 12:11
C++
1
2
3
4
5
6
if (strcpm(argv[1], "/exit") == 0)
{
   HANDLE hEvent = ::OpenEventW(EVENT_MODIFY_STATE, L"MyExitEvent");
   if (hEvent)
        ::SetEvent(hEvent);
}
Как-то так

Добавлено через 39 секунд
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Вообщем, может как то использовать уже имеющийся код или все-таки через ваш совет лучше?
Мютексы здесь не подойдут, нужно именно событие
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
18.07.2019, 12:14  [ТС]
Я так понял мутекс можно заменить событием и убить двух зайцев?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.07.2019, 12:16
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Я так понял мутекс можно заменить событием и убить двух зайцев?
Если ты его для этого использовал, то да

Добавлено через 18 секунд
Тоько ExitProcess процесс не нужно делать
1
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
18.07.2019, 12:18  [ТС]
И в этот цикл
C++
1
while (WM_QUIT != msg.message)
добавить еще одну проверку
C++
1
if (::WaitForSingleObject(hExitEvent, 0) != WAIT_TIMEOUT)
?

Добавлено через 46 секунд
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Тоько ExitProcess процесс не нужно делать
Да , я уже начал понимать...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.07.2019, 12:23
Цитата Сообщение от FreakMurderer Посмотреть сообщение
добавить еще одну проверку
Наверное, только там не return делай, а PostQuitMessage
И оконному приложению вроде можно как-то сообщение послать из другого процесса, т.е. обойтись без этих фокусов
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
18.07.2019, 12:27  [ТС]
И оконному приложению вроде можно как-то сообщение послать из другого процесса, т.е. обойтись без этих фокусов
Ну, наверное, поэтому я и переспрашивал...
Напрашивается вопрос, как расшарить handle окна другому себе?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
18.07.2019, 13:16
Цитата Сообщение от FreakMurderer Посмотреть сообщение
Ну, наверное, поэтому я и переспрашивал...
Напрашивается вопрос, как расшарить handle окна другому себе?
Смотрю, с событием как-то проще получается.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.07.2019, 17:49
Навскидку... Почему нельзя просто найти окно при помощи FindWindow() и послать ему сообщение WM_CLOSE?
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
18.07.2019, 18:35  [ТС]
А вдруг найдет какое-то другое окно? + программа работает только из трея.

Короче, сделал через Creating Named Shared Memory и SendMessage(hwnd... )
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
18.07.2019, 18:42
Цитата Сообщение от FreakMurderer Посмотреть сообщение
А вдруг найдет какое-то другое окно?
Так программа-то своя. Дать замысловатое имя класса, плюс имя окна. Как в таких условиях найти другое окно? Можно сделать, чтобы при запуске искать запущенную, и если есть, то завершаться. Ну либо завершить ту по /exit
Впрочем, хозяин - барин... Я просто предложил альтернативу...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2019, 18:42
Помогаю со студенческими работами здесь

Пишу программу для работы с SIP или как читать данные другого процесса?
Люди добрые памагите!!!))) уже неделю мучаюсь с проблемой. Есть sip клиент. и программа написанная на vb.net. Необходимо из программы...

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

Закрыть программу после запуска другого exe ( программно)
Подскажите пожалуйста, что нужно дописать , чтобы после запуска приложения методами паскаля (exec) консоль паскаля закрывалась ?

Как корректно закрыть соединение TCP на стороне клиента
Код следующий: TcpClient client = new TcpClient(server, port); Byte data ; // Get a client stream for...

Как корректно закрыть свое приложение из самой себя?
При открытии программы происходит аутентификация, это делается в событии OnFormCreate и соответственно, если она не прошла, то нужно...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru