Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
edw1111
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 3
1

Один экземпляр процесса

10.12.2017, 21:22. Просмотров 823. Ответов 7
Метки нет (Все метки)

Всем привет
У меня есть батник, мне надо чтобы его нельзя было запустить больше 1 экземпляра
т.е мне надо как то посчитать открытые одинаковые процессы и если их больше 1, то закрыть 1 экземпляр но как это правильно написать я не знаю
Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2017, 21:22
Ответы с готовыми решениями:

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

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

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

Запустить только один экземпляр формы
При создание приложении на vb net, все приложения можно запустить несколько...

Один экземпляр класса для всех активити
Как это можно реализовать?Если класс не поддается сериализации.

7
alpap
1455 / 1171 / 381
Регистрация: 26.04.2015
Сообщений: 4,123
11.12.2017, 00:19 2
Цитата Сообщение от edw1111 Посмотреть сообщение
больше 1 экземпляра
на cmd такого не сделать, но опишите проблему детально и цель, возможно проблема в другом или решение будет другим
0
v_svitere
361 / 296 / 98
Регистрация: 03.06.2009
Сообщений: 852
Записей в блоге: 4
11.12.2017, 13:16 3
Очень просто реализовать на powershell, при помощи WMI-класса win32_proccess и переменной окружения $PID
PowerShell
1
2
3
4
5
function test-duplicate-process
{
    $PoshCommandLine=Get-WmiObject win32_process|?{$_.name -eq "powershell.exe" -and $_.Processid -ne  $pid}|%{$_.commandline}
    if ($PoshCommandLine -match "script_task_working"){Stop-Process -Id $pid}
}
1
Dragokas
Эксперт WindowsАвтор FAQ
17009 / 7065 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
13.12.2017, 14:41 4
edw1111, можете после запуска батника сохранять PID "себя" в файл: см. подпрограмму в конце: Полезные BAT/CMD скрипты

А перед тем как сохранить, наоборот, считываете этот PID из файла, и если он принадлежит процессу cmd.exe, запрещать его запуск.

Цитата Сообщение от v_svitere Посмотреть сообщение
Очень просто реализовать на powershell, при помощи WMI-класса win32_proccess и переменной окружения $PID
Если я правильно понял, ему нужно запретить запуск одного и того же батника, а не любого cmd.
Но это уже пусть ТС объяснит.

P.S. да и у CMD тоже есть доступ к WMI через wmic.
1
v_svitere
361 / 296 / 98
Регистрация: 03.06.2009
Сообщений: 852
Записей в блоге: 4
13.12.2017, 15:44 5
Dragokas,
Если я правильно понял, ему нужно запретить запуск одного и того же батника, а не любого cmd.
Так я же именно про это и говорю.
Просто у объекта процесса, в свойстве commandLINE, по идее, должен прописываться полный путь до запущенного BAT-файла, но я могу это с уверенностью сказать в разрезе POWERSHELL-сценариев

Идея такая:
В начале сценария ставится проверка, которая выполняет следующее:
1. Получаем все процессы CMD за исключением собственного
2. Получаем CommandLine каждого процесса
3. Если в CommandLine однозначно определяем запущенный батник, то закрываем собственный процесс.

Примерно так.
2
edw1111
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 3
14.12.2017, 15:22  [ТС] 6
Да , у меня есть bat файл и он выполняет некоторые приложения
и если нажать на этот бат файл несколько раз, то он запускает много этих приложений, что вызывает нереальные лаги компьютера
мне же надо чтобы даже если я тысячу раз нажму на него запустилось всего одно приложение
0
v_svitere
361 / 296 / 98
Регистрация: 03.06.2009
Сообщений: 852
Записей в блоге: 4
14.12.2017, 17:48 7
Лучший ответ Сообщение было отмечено edw1111 как решение

Решение

edw1111,
Да , у меня есть bat файл и он выполняет некоторые приложения
Тогда и того проще, сделайте в начале BAT-файла проверку на уже запущенный процесс приложения.
В том случае если таковой уже имеется, можно завершать выполнение BAT-файла.
Я думаю, тут пару строк кода, знатоки CMD, вам помогут, я могу помочь если вас устроит вариант на powershell
1
edw1111
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 3
14.12.2017, 18:21  [ТС] 8
Все, я разобрался , большое спасибо
0
14.12.2017, 18:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2017, 18:21

Послать один экземпляр события несколько раз
Возможно диспатчить один инстенс несколько раз изменяя его свойства? Я некогда...

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

Настроить БД, чтобы использовался только один её экземпляр
Как настроить бд чтобы использовался только один её экземпляр с ним и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru