Войти

Показать полную графическую версию : [решено] Закрывать список процессов каждых 2 минуты


tarasov.evgeny
07-09-2010, 14:09
Добрый день
Задача
Установить скрипт как службу. В последствие данная служба будет установлена на офисные компьютеры.
Служба должна проверять по заранее заданному списку процессы и в случае их наличия убивать их. Период проверки 1 минута или 2.

Как установить скрипт.exe как службу я нашел. Есть программа AnyServ
Как убить процесс я тоже нашел
If Not ProcessExists ("notepad.exe") Then Exit
ProcessClose ("notepad.exe")

Как сделать так, чтобы проверка выполнялась каждых сколько-то минут, секунд
Как сделать так, чтобы проверялось больше одного процесса

Dim $Array [2]
$Array [0]="notepad.exe"
$Array [1]="calc.exe"
For $temp in $Array
If ProcessExists($temp) Then ProcessClose ($temp)
Next
exit

Вот так убивает два процесса заранее опознанных, как сделать так чтобы задача повторялась периодически

Вот так зациклен процесс и выполняется каждых 30 секунд
Dim $Array [2]
$Array [0]="notepad.exe"
$Array [1]="calc.exe"
For $i=1 to 3
For $temp in $Array
If ProcessExists($temp) Then ProcessClose ($temp)
Next
Sleep (30000)
$i=1
Next
exit

Есть ли, что-то более верное?
Более правильное?

madmasles
07-09-2010, 14:39
tarasov.evgeny,
Можно так попробовать:#NoTrayIcon
#include <Timers.au3>

;список убиваемых процессов в массиве:
Dim $aProcesses[6] = [5, 'process1.exe', 'process2.exe', 'process3.exe', 'process4.exe', 'process5.exe']
;пауза между проверками в секундах
Global $iPouse = 30
Global $sRegRun = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'

;проверка записи себя в автозагрузку
If RegRead($sRegRun, @ScriptName) = '' Or RegRead($sRegRun, @ScriptName) <> @ScriptFullPath Then
RegWrite($sRegRun, @ScriptName, "REG_SZ", @ScriptFullPath)
EndIf

While 1
For $i = 1 To $aProcesses[0]
If ProcessExists($aProcesses[$i]) Then
_ToolTipEx('Нельзя запускать ' & $aProcesses[$i], 1, 1, 'Злой админ', 3, 5, 3000)
ProcessClose($aProcesses[$i])
EndIf
Next
Sleep($iPouse * 1000)
WEnd

Func _ToolTipEx($sText, $iX = Default, $iY = Default, $sTitle = Default, $iIcon = Default, $iOptions = Default, $iTimeOut = 0)
ToolTip($sText, $iX, $iY, $sTitle, $iIcon, $iOptions)

If $iTimeOut Then
_Timer_SetTimer(0, $iTimeOut, "_ToolTipEx_Callback")
EndIf
EndFunc ;==>_ToolTipEx

Func _ToolTipEx_Callback($hWnd, $Msg, $iIDTimer, $dwTime)
_Timer_KillTimer($hWnd, $iIDTimer)
ToolTip("")
EndFunc ;==>_ToolTipEx_CallbackМожно для надежности еще заблокировать Реестр и Диспетчер задач.

tarasov.evgeny
08-09-2010, 16:43
madmasles
спасибо. Круто :)
Остался при своем решение. У вас мне пока очень многое не понятно. Дело не в том, что я не доверяю. Просто хочу пользоваться тем, что смогу изменить. А ваш скрипт мне не понятен
Я вижу в нем, что вы создаете массив, задаете две переменные, затем если записи в реестре нет вы его прописываете в автозагрузку компьютера
$iPause - я так понял, просто для более короткой записи, вместо 30000?
Func _ToolTipEx - это просто для сообщения - Злой админ?
Func _ToolTipEx_Callback зачем?

P.S Возникла проблема с установкой службы. Служба устанавливается, но не запускается :(
Error 1053.

madmasles
08-09-2010, 17:05
Просто хочу пользоваться тем, что смогу изменить. »Это Ваше дело (и право) пользоваться тем, чем хотите, только зачем тогда было тему начинать?
Func _ToolTipEx - это просто для сообщения - Злой админ?
Func _ToolTipEx_Callback зачем? »
В этой теме посмотрите (http://forum.oszone.net/thread-184672.html), особенно этот пост (http://forum.oszone.net/post-1489765.html#post1489765).




© OSzone.net 2001-2012