Компьютерный форум 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=135912)

Stranger404 26-03-2009 11:40 1075153

Помогите с написанием bat файла для проверки запущенного процесса.
 
При автозагрузке запускается процесс xxx.exe
Пользователь может закрыть этот процесс, случайно или специально.
Можно ли написать пакетный файл, чтобы каждые n минут проверял наличие этого процесса и в случпе его отсутствия запускал его по новой?

Petya V4sechkin 26-03-2009 12:08 1075175

Stranger404, пример для блокнота:
Код:

@Echo Off
SetLocal EnableExtensions

Set ProcessName=notepad.exe
TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% NEQ 0 Start %windir%\%ProcessName%

Скрипт добавить в Планировщик заданий.

Stranger404 26-03-2009 12:21 1075189

Спасибо!

gora 26-03-2009 12:36 1075202

Stranger404, учтите, что предложенный выше скрипт зависим от версии Windows и на Windows XP Home, например, работать не будет (tasklist.exe в ней отсутствует). :(

Petya V4sechkin 26-03-2009 12:41 1075207

Тогда можно VBS-скриптом:
Код:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery( _
    "Select Name From Win32_Process " _
    & "Where Name = 'notepad.exe'")

If colProcesses.Count = 0 Then
  Set objShell = Wscript.CreateObject("Wscript.Shell")
  objShell.Run "notepad.exe"
End If


Stranger404 26-03-2009 12:48 1075218

Спасибо, мне первый подошел отлично.
VBS как запасной вариант)

Fresh96 20-05-2009 01:01 1122855

не уверен, но кажется проблема похожая...

ПРОБЛЕМА.

может как то можно решить с помощью bat/cmd.

Mishechka 16-08-2011 15:43 1733138

Petya V4sechkin,

В конце установки ОС Windows 7 появляется сообщение о том, что идёт настройка рабочего стола и через какое-то время появляется рабочий стол. Мне нужно после загрузки рабочего стола запустить reg-файл. Могу ли ипользовать Ваш код для этого?

Как-то так:
Код:

@Echo Off
SetLocal EnableExtensions

Set ProcessName=explorer.exe
TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% NEQ 1 start /wait regedit /s %DiskRoot%\Win7ProSP1\Install\hkcu.reg

Я в этом не разбираюсь, поэтому не знаю правильно ли я навоял.

Спасибо.

sov44 24-11-2011 17:48 1802556

Подскажите, как правильно написать поиск и убийство процесса без вывода в командную строку служебных сообщений.
Без 1>Nul 2>nul процесс убивается, но выводятся служебные сообщения.
С 1>Nul 2>nul процесс не убивается, зато и сообщений нет.
Код:

@Echo Off
SetLocal enabledelayedexpansion

set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"

for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.*" 2^>nul') do (
 1>Nul 2>nul tasklist|findstr /bic:"winword.exe"&&(taskkill /F /IM winword.exe&echo Word закрыт принудительно)
)
pause


Iska 24-11-2011 19:12 1802613

sov44, попробуйте так:
Код:

for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.*" 2^>nul') do (
 1>Nul tasklist /nh |findstr /bic:"winword.exe"&&(taskkill /F /IM winword.exe&echo Word закрыт принудительно)
)


sov44 24-11-2011 19:16 1802617

Цитата:

Цитата Iska
sov44, попробуйте так: »

Iska, к сожалению процесс не убивается.

Iska 24-11-2011 21:18 1802669

sov44, а что и почему Вы ищите в «%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word»?

sov44 24-11-2011 21:41 1802679

Цитата:

Цитата Iska
sov44, а что и почему Вы ищите в «%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word»? »

это один из путей по очистке системы от мусора

Iska 24-11-2011 22:57 1802725

Ну, и…? У меня, например, нет такой папки вовсе. Отчего ж будут запускаться вложенные команды:
Код:

1>nul tasklist /nh |findstr /bic:"winword.exe"&& ( echo taskkill /F /IM "winword.exe" & echo Word закрыт принудительно)
?

Далее, допустим, такая папка есть. Допустим, в ней есть какие-то файлы. Вывод:
Код:

dir /b/a-d "%dr%\*.*" 2>nul
будет не пустой. И зачем надо снимать все экземпляры Word, если неизвестно, заблокированы ли эти файлы этими экземплярами Word'а?

Мой Вам совет: плюньте и просто удаляйте файлы из этой папки, если она есть, не взирая на ошибки при удалении заблокированных файлов. Не удалите их в этот раз — удалите в следующий.

sov44 24-11-2011 23:30 1802740

Цитата:

Цитата Iska
У меня, например, нет такой папки вовсе. »

У меня есть ( Windows XP SP3\Office 2010) :)
Iska, при всём уважении, мы отошли от решения проблемы

Iska 25-11-2011 00:56 1802781

Проблема? Как можно решить то, чего нет?!

Я задал не один вопрос.

sov44 25-11-2011 11:06 1802980

Решение подсказали на другом форуме.
Код:

@echo off
set "dr=%USERPROFILE%\Local Settings\Temporary Internet Files\Content.Word"

for /f "delims=*" %%i in ('dir /b/a-d "%dr%\*.*" 2^>nul') do (
tasklist 2>nul|findstr /bic:"winword.exe" 1>nul 2>nul&&(taskkill /F /IM winword.exe 1>nul 2>nul&echo winword.exe закрыт принудительно)
)
pause


cheloveshka 17-08-2020 22:50 2931496

Я извиняюсь за глупые вопросы, но не смог понять, как сделать так, чтобы определять:
Если запущено больше одного экзешника программы, то ничего не делать?
Как это понимаю я:

Код:

echo off
SetLocal EnableExtensions
Set ProcessName=someprogram.exe

TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
If %ErrorLevel% GTR 1 goto :exit
)Else(
rem много строчек основного кода
@echo Выполняю логику батника
)
:exit
exit >nul

А вообще в данном контексте Else можно не использовать?


Время: 19:35.

Время: 19:35.
© OSzone.net 2001-