Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702

OC Windows, как сделать так, чтобы при запуске процесса, он убивался, если уже такой процесс есть?

05.10.2014, 11:55. Показов 1079. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ну то есть экзешник должен выполняться в оси в единственном экземпляре, как сие реализовать ГРАМОТНО? По-простому-то я сделаю. Я в крайнем случае файл какой создам процессом, который и будет определять наличие последнего (хотя опять же, а если процесс аварийно закончится, значит, он не уничтожит этот файл и в следующий раз не запустится. Тут надо подумать). Можно также посмотреть межпроцессорное взаимодействие.

Надо какое-то изящное решение. Я имел ввиду, может, API-функция какая есть? Например, функция f, которая возвращает true, если этот экзешник уже запущен. Тогда всё просто:

C++
1
2
if (f())
 return 0;
Предпочтение плюсам, ибо пишу на них. Спасибо, кто откликнется
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2014, 11:55
Ответы с готовыми решениями:

Как сделать так, чтобы при запуске программы её не было видно?
Как сделать так, чтобы при запуске программы её не было видно? А именно программа запущена а никакой визуализации нет.

Как сделать так, чтобы папка создавалась вне зависимости от того, что папка с таким именем уже есть?
У меня есть: MkDir "C:\Новая папка" Но когда я повторно запускаю программу а такая папку уже есть то вылезает ошибка. Как написать...

Как отрубать текущий процесс если уже есть запущенный экземпляр?
дело происходит на C# при этом хочется, чтобы новая копия процесса перед закрытием себя показывала спрятанное окно старой копии ...

4
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.10.2014, 12:28
Типовое решение - использовать именованный объект ядра, например мьютекс.
Если после успешного создания мьютекса GetLastError вернет ERROR_ALREADY_EXISTS,
значит, приложение где-то уже запущено. При желании мьютекс можно сделать
глобальным (префикс "Global\" в имени), тогда под проверку будут попадать процессы
во всех запущенных сессиях (включая терминальные). Единственное: для такого
мьютекса нужно будет настроить разрешения доступа, иначе CreateMutex будет
завершаться с ошибкой ERROR_ACCESS_DENIED.
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,702
05.10.2014, 20:06  [ТС]
А так вот можно, без GetLastError()?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
    HANDLE mut;
    mut = CreateMutex(NULL, FALSE, "FirstStep");
    DWORD result;
    result = WaitForSingleObject(mut,0);
    if (result == WAIT_OBJECT_0) 
    {
        cout << "programm running" << endl;
        ReleaseMutex(mut);
    }
    else
        cout << "fail programm running" << endl;
    CloseHandle(mut);
    getchar ();
}
Кстати, раз уж я знаком с библиотекой pthread, решил задействовать семафоры из неё и вот что нашёл:

http://www.sourceware.org/pthr... index.html

"sem_init initializes the semaphore object pointed to by sem. The count associated with the semaphore is set initially to value. The pshared argument indicates whether the semaphore is local to the current process ( pshared is zero) or is to be shared between several processes ( pshared is not zero).

Pthreads-w32 currently does not support process-shared semaphores, thus sem_init always returns with error EPERM if pshared is not zero."
- эта официальная инфа, я pthread оттуда и качал

А для функции set_open вообще нет объяснений, хотя в хидерах она есть, возвращает -1. Похоже, вместо неё заглушка какая-то.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.10.2014, 23:21
Цитата Сообщение от kravam Посмотреть сообщение
А так вот можно, без GetLastError()?
А смысл ?
Все, что нужно (и достаточно) - вызвать CreateMutex и проверить код GetLastError.
0
Эксперт по электронике
6524 / 3153 / 332
Регистрация: 28.10.2011
Сообщений: 12,370
Записей в блоге: 7
12.10.2014, 09:48
PureBasic
1
2
3
4
5
6
7
8
9
10
Procedure RunOnlyOne()
  Name.s=ProgramFilename()
  a = CreateSemaphore_(#Null, 0, 1, @Name)
  If a<>0 And GetLastError_() = #ERROR_ALREADY_EXISTS
    CloseHandle_(a)
    End
  EndIf
EndProcedure
 
RunOnlyOne()
Если программа уже запущена, этот экземпляр завершит свою работу выполнив оператор End.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2014, 09:48
Помогаю со студенческими работами здесь

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

Как сделать так чтобы при запуске программы всплывало окошко со входом(регистрацией)
Надо чтобы при запуске программы запрашивало логин и пароль. И только потом запускалось главное окно. Не подскажите что можно использовать?

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

Как в базе данных, в запросе сделать так, чтобы пользователь вводил даты, и если такой даты нету, то выводило окно "тако
Как в базе данных, в запросе сделать так, чтобы пользователь вводил даты, и если такой даты нету, то выводило окно &quot;такой даты нет,...

Как сделать так чтобы программа при запуске отображалась в системном трэе а не в обычном окне
Здравствуйте , подскажите пожалуйста как можно сделать так чтобы программа при запуске отображалась в системном трэе а не в в окне. Пишу...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru