Что нового

[Процессы] Принудительно завершить процесс

Heavenanvil

Новичок
Сообщения
21
Репутация
0
Есть ли способ с помощью autoit принудительно завершить процесс, если он не хочет завершаться?

Я использую данный метод:
Код:
Local $iID = ProcessExists("notepad.exe")
If $iID Then
	While ProcessClose("notepad.exe")
  Sleep(11)
WEnd

Только вместо notepad у меня другое приложение, которое даже при попытке закрытия всегда спрашивает точно ли я хочу его закрыть.
Так вот когда я запускаю описанный выше скрипт, autoit выдаёт мне следующее окно:

Autoit Error
Line 2934 (File "C:\myscript.exe"):
Error: The requested action with this object has failed
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
точно в скрипте только такой код или есть еще ?
по теме: приложение отслеживает команду закрытия. можно добавить клик в окне с вопросом о закрытии.
 
Автор
Heavenanvil

Heavenanvil

Новичок
Сообщения
21
Репутация
0
joiner сказал(а):
точно в скрипте только такой код или есть еще ?
по теме: приложение отслеживает команду закрытия. можно добавить клик в окне с вопросом о закрытии.
Есть у меня подозрения, что проблема не конкретно в этом. А как то можно логи выводить, во время работы скрипта?
 

Prog

Продвинутый
Сообщения
592
Репутация
72
Бывают разные методы защиты от завершения. Наиболее сложный случай когда защита осуществляется драйвером. Завершить такой процесс стандартными средствами не получится. Потребуется выполнить код с наивысшими привилегиями на нулевом кольце защиты.
 
Автор
Heavenanvil

Heavenanvil

Новичок
Сообщения
21
Репутация
0
Prog сказал(а):
Бывают разные методы защиты от завершения. Наиболее сложный случай когда защита осуществляется драйвером. Завершить такой процесс стандартными средствами не получится. Потребуется выполнить код с наивысшими привилегиями на нулевом кольце защиты.

А как это сделать? Возможно такая защита и есть.
OC: Windows XP
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
попробуй через комстроку
taskkill /PID $PID /F /T
 

Prog

Продвинутый
Сообщения
592
Репутация
72
Heavenanvil [?]
А как это сделать?
Сначала нужно выяснить метод защиты если она вообще есть. Возможно дело в привилегиях приложения и достаточно будет прав администратора или системы.

Если защита выполняется на уровне ядра ОС, потребуется написать драйвер завершающий процесс. Еще можно попробовать внедрить dll в процесс и выполнить функцию ExitProcess http://vsokovikov.narod.ru/New_MSDN_API/Process_thread/fn_exitprocess.htm
 
Автор
Heavenanvil

Heavenanvil

Новичок
Сообщения
21
Репутация
0
Опытным путём было выяснено, что проблема была вовсе не в процессе, а в другой функции, которая должна была меня оповестить по электронной почте о том, что компьютер был перезагружен.

Вот код скрипта, но пока не пойму, что вызывает ошибку. На другом компе Windows 7 всё работает, а на Windows XP не хочет. (Поэтому я и думал, что проблема в оставшейся части кода, где завершается процесс)
Код:
Func SendMail()
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
Global $time = _NowTime()
Global $date = _NowCalcDate()
With $hMAIL
.From = "мойящик@yandex.ru"
.To = "мойящик@yandex.ru"
.Subject = "Сервер  был перезагружен " & $date & " - " & $time
.BodyPart.Charset= "UTF-8"
.HTMLBody = "Сервер был перезагружен. 
 Включение: <strong>" & $date & "</strong> -  <strong>" & $time & "</strong>"
EndWith
With $hMAIL.Configuration.Fields
.Item ($str & "sendusing") = 2
.Item ($str & "smtpserver") = "smtp.yandex.ru"
.Item ($str & "smtpauthenticate") = 1
.Item ($str & "sendusername") = "мойящик@yandex.ru"
.Item ($str & "sendpassword") = "мойпароль"
.Item ($str & "smtpusessl") = 1
.Item ($str & "smtpserverport") = 465
.Update
EndWith
$hMAIL.Send
MsgBox(4096 + 64, 'Информация', 'Сообщение отправлено.')
EndFunc


p.s. возможно теперь тему нужно будет переименовать.

update
На компьютере с Windows XP стоят какие-то ограничения на внешний интернет. Поэтому и скрипт не работает.
Хотя пинг до яндекса и гугла идёт... И team viewer через внешку успешно работает. Как тогда мне письмо отправить?
На некоторые сайты зайти могу, но 90% нет. Похоже на фаервол, но ничего такого там нет.
 
Верх