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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] BAT для перезапуска программы по времени (http://forum.oszone.net/showthread.php?t=199866)

xctr 18-02-2011 17:40 1616384

BAT для перезапуска программы по времени
 
Всем добрый день прошу помощи с на написанием bat для запуска и выключения программы в определённые промежутки времени.
Ситуация:
Нужно запустить программу bat файлом и через 13минут эту программу тем же bat файлом перезапустить автоматически, осложняется тем что в системе запущенно несколько одинаковых программ и как выключить именно ту которая запустилась с bat для меня секрет.

Anonymоus 18-02-2011 18:16 1616420

Цитата:

Цитата xctr
как выключить именно ту которая запустилась с bat для меня секрет. »

Вариант с именем процесса сразу отпадает, а как насчет того, чтобы перед запуском получить PID уже запущенных процессов с таким именем, после запуска еще раз получить список PID, взять недавно появившийся, который и является PID запущенной скриптом программы, а потом, когда подойдет время завершения - завершить по PID?

Ivan Bardeen 18-02-2011 19:43 1616473

Цитата:

Цитата xctr
Нужно запустить программу bat файлом и через 13минут эту программу тем же bat файлом перезапустить автоматически »

Вот VB скрипт
Код:

strComputer = "."
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
objProcess.Create "Notepad.exe", , , intProcessID
WScript.Sleep 780000 'ждем 13 минут

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessId = " & intProcessID)
For Each objProc In colProcessList
    objProc.Terminate()
Next

objProcess.Create "Notepad.exe"


xctr 18-02-2011 19:51 1616476

Цитата:

Цитата Anonymоus
Вариант с именем процесса сразу отпадает, а как насчет того, чтобы перед запуском получить PID уже запущенных процессов с таким именем, после запуска еще раз получить список PID, взять недавно появившийся, который и является PID запущенной скриптом программы, а потом, когда подойдет время завершения - завершить по PID? »

не подойдёт программы постоянно пере запускаются.
Ivan Bardeen,
подскажите, а где в этом скрипте задаются параметры для запуска? Программа запускается с определёнными параметрами (к ярлыку дописываю).

Ivan Bardeen 18-02-2011 19:58 1616482

Цитата:

Цитата xctr
подскажите, а где в этом скрипте задаются параметры для запуска? Программа запускается с определёнными параметрами (к ярлыку дописываю). »

Прямо в кавычках
напрмер графический интерфейс программы shutdown
Код:

strComputer = "."
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
objProcess.Create "shutdown -i", , , intProcessID
WScript.Sleep 780000

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where ProcessId = " & intProcessID)
For Each objProc In colProcessList
    objProc.Terminate()
Next

objProcess.Create "shutdown -i"


xctr 19-02-2011 02:29 1616729

Ivan Bardeen, проверил что то не то с этим скриптом не пере запускает он программу через указанное время.

Ivan Bardeen 19-02-2011 08:25 1616766

Цитата:

Цитата xctr
Ivan Bardeen, проверил что то не то с этим скриптом не пере запускает он программу через указанное время. »

Что за программа и покажите код скрипта, который у вас получился.

amel27 20-02-2011 04:56 1617406

Цитата:

Цитата xctr
запустить программу bat файлом и через 13минут эту программу тем же bat файлом перезапустить автоматически »

Код:

@echo off

set PNAME=notepad.exe
set PPATH=%windir%\system32\notepad.exe

set TITLE=%RANDOM%%RANDOM%
TITLE %TITLE%
:LOOP
(Start "" "%PPATH%"
 ping -w 780000 192.0.2.0 -n 1 >nul
 for /f "tokens=2 delims=," %%a in ('TaskList /NH /FO CSV /FI "WINDOWTITLE eq %TITLE%"') do (
 for /f "skip=1" %%b in ('WMIC PROCESS WHERE "ParentProcessId=%%~a AND Name='%%PNAME%%'" Get ProcessId^,SessionID') do (
 taskkill /PID "%%b"
)))
GoTo:LOOP



Время: 15:24.

Время: 15:24.
© OSzone.net 2001-