Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Запуск process2 если process1 уже запущен и остановка. (http://forum.oszone.net/showthread.php?t=342938)

qo_op 14-11-2019 13:41 2896233

Запуск process2 если process1 уже запущен и остановка.
 
Товарищи, помогите пожалуйста, не могу решить задачу.

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

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 или любой другой скрипт.
Спасибо за ранее всем.

DJ Mogarych 14-11-2019 14:27 2896243

Powershell, что-то вроде того:
Код:

if ((Get-Process one.exe -ErrorAction SilentlyContinue) -and !(Get-Process two.exe -ErrorAction SilentlyContinue)) {Start-Process two.exe}
else {Stop-Process two.exe}


megaloman 14-11-2019 16:26 2896268

qo_op,
Цитата:

Цитата qo_op
Если ONE.exe запущен »

Цитата:

Цитата qo_op
(Грубо говоря, если работает ONE.exe то вместе с ним должен работать Two.exe Three.exe) »

Если они уже работают, что делать? Убить и
Цитата:

Цитата qo_op
запускать процесс TWO.exe (Он запускает в свою очередь процесс Three.exe с параметрами и управляет им в течении его работы) »

или ничего не делать?

qo_op 14-11-2019 16:31 2896271

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

megaloman 14-11-2019 21:55 2896319

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

Файлы и пути пропишИте свои

zbeypepels 15-11-2019 20:05 2896496

типа того...
Код:

@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



Время: 23:27.

Время: 23:27.
© OSzone.net 2001-