Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Запуск process2 если process1 уже запущен и остановка.

Ответить
Настройки темы
Любой язык - Запуск process2 если process1 уже запущен и остановка.

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: qo_op
Дата: 14-11-2019
Описание: Добавил информацию
Товарищи, помогите пожалуйста, не могу решить задачу.

В чем заключается задача:

ClientStarter.exe - Программа за которой нужно следить.
start.exe - Программа запускает с параметрами "ffmpeg.exe"
ffmpeg.exe - процесс который, должен работать параллельно ClientStarter4.exe

Если работает ClientStarter.exe, нужно запустить файл start.exe (В свою очередь который запустит с параметрами ffmpeg.exe)
Если не работает ClientStarter.exe убить процесс start.exe и ffmpeg.exe

--------------------------------------------------------------------
Пробовал такой .bat, но проблема в том что у меня получаются дубли.
Я думал сделать 2 таких .bat, чтобы они друг другу помогали, но это слишком сложно.
Код: Выделить весь код
@echo off
SETLOCAL EnableExtensions
set EXE=ClientStarter.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
start "D:\not-running\stop.exe"
goto FIN
:FOUND
start "D:\running\start.exe"
:FIN
pause
Может, другие варианты есть у вас, буду рад видеть их, абсолютно любые.
Даже если это vbs, ps1 или любой другой скрипт.
Спасибо за ранее всем.

Отправлено: 13:41, 14-11-2019

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Powershell, что-то вроде того:
Код: Выделить весь код
if ((Get-Process one.exe -ErrorAction SilentlyContinue) -and !(Get-Process two.exe -ErrorAction SilentlyContinue)) {Start-Process two.exe}
else {Stop-Process two.exe}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:27, 14-11-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


qo_op,
Цитата qo_op:
Если ONE.exe запущен »
Цитата qo_op:
(Грубо говоря, если работает ONE.exe то вместе с ним должен работать Two.exe Three.exe) »
Если они уже работают, что делать? Убить и
Цитата qo_op:
запускать процесс TWO.exe (Он запускает в свою очередь процесс Three.exe с параметрами и управляет им в течении его работы) »
или ничего не делать?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 16:26, 14-11-2019 | #3


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, Изменил тему, добавил информацию

Последний раз редактировалось qo_op, 14-11-2019 в 21:33.


Отправлено: 16:31, 14-11-2019 | #4


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


vbs. Не понимаю, как стартует третий екзешник, поэтому его старт не организовавал никак
Код: Выделить весь код
Exe1 = "winamp.exe"
Exe2 = "Notepad.exe"
Exe3 = "Calc.exe"

Path1 = "C:\Program Files\Winamp"
Path2 = "C:\Windows\System32"

Set WMI = GetObject("winMgmts:")

nExe1 = CountProc(WMI, Exe1, Proc1)
nExe2 = CountProc(WMI, Exe2, Proc2)
nExe3 = CountProc(WMI, Exe3, Proc3)

If Not (nExe1 = 1 And nExe2 = 1 And nExe3 = 1) Then
    Call Killer(Proc2, nExe2)
    Call Killer(Proc3, nExe3)
    
    With CreateObject("WScript.Shell")
        If nExe1 <> 1 Then
            Call Killer(Proc1, nExe1)
            .Exec Path1 + "\" + Exe1
            WScript.Sleep 5000
        End If
        .Exec Path2 + "\" + Exe2
    End With
End If
' ==================================

Function CountProc(WMI, Exe, Processes)
    On Error Resume Next
    Err.Number = 0
    
    Set Processes = WMI.ExecQuery("SELECT * FROM Win32_Process Where Name=""" + Exe + """")
    If Err.Number = 0 Then
        CountProc = Processes.Count
    Else
        CountProc = -1
    End If
    On Error GoTo 0
End Function

Sub Killer(Processes, N)
    If N < 1 Then Exit Sub
    For Each Process In Processes
        Process.Terminate
    Next
End Sub
Файлы и пути пропишИте свои

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:55, 14-11-2019 | #5


Забанен


Сообщения: 53
Благодарности: 6

Профиль | Цитировать


типа того...
Код: Выделить весь код
@echo off
SETLOCAL EnableExtensions
cd /d "%~dp0"
chcp 866 >nul

set "cs=ClientStarter.exe"
set "strt=D:\running\start.exe"

tasklist | findstr /i "%cs%" && set proc=exist||set proc=no >nul

if /i "%proc%"=="exist" ( start "" "%strt%"  ) else ( goto :killPrc)
exit

:killPrc
rem убить  start.exe и ffmpeg.exe
TASKKILL /IM start.exe
TASKKILL /IM ffmpeg.exe
pause
exit

Отправлено: 20:05, 15-11-2019 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Запуск process2 если process1 уже запущен и остановка.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Автоматический запуск CMD-файла если не запущен процесс kirillius Скриптовые языки администрирования Windows 8 27-10-2016 14:48
CMD/BAT - Убить процесс, только если он запущен Sisin Скриптовые языки администрирования Windows 34 28-09-2016 10:58
CMD/BAT - Закрытие после выполнения и проверка если запущен snipersu28 Скриптовые языки администрирования Windows 7 13-08-2016 18:46
CMD/BAT - Удаление пераметра реестра если bat файл запущен в Безопасном режиме Sfero_ID Скриптовые языки администрирования Windows 6 05-06-2013 15:25
Не работает WinWaitActive если скрипт запущен из Windows sheduler Kubik AutoIt 0 11-02-2011 16:28




 
Переход