Показать полную графическую версию : Как прервать работу
Недавно создавал небольшой батник и из-за ошибки, нашел интересный баг (возможно это не баг). Собственно вот код:
a:
msg * "bla-bla-bla"
goto a
Даже при закрытии окна cmd эта команда будет выполнятся. Если вместо msg * "bla-bla-bla" ввести start, то собственно начинает открывать новые окна cmd, причем как это отключить я так и не понял. На 700 окнах комп лег (хотя, возможно, все еще их открывал).
Так вот, как выйти, ну или завершить данный процес? В деспетчере задач он не отображается, точнее он скрыт в csrss.exe и используется из него. Ясное дело, что килять его это черевато последствиями, была мысля отследить его в потоках, но как-то боязно не то кильнуть.
Заранее спасибо за ответ)
Собственно вот код: »
Системе не удается найти указанный диск.
Не удается найти указанную метку пакетного файла - a
Предположу, что речь шла про такой код:
:Loop
msg * "bla-bla-bla"
goto :Loop
Отчего Вы решили, что здесь есть какой-то баг? Вы запускаете бесконечный цикл отправки асинхронных сообщений всем сеансам. Пакетный файл можно прервать любым способом, начиная от нажатия «Ctrl-C»/«Ctrl-Break», и до описываемого Вами закрытия окна консоли. Суть в том, что за время, прошедшее до прерывания пакетного файла, последний уже успел «наштамповать» в бесконечном цикле тысячи, а то и десятки тысяч сообщений, которые продолжают асинхронно поступать к Вам. Понимаете? Процесс отправки сообщения «msg.exe» и процесс, отображающий окно MessageBox'а:
---------------------------
Сообщение от User 05.10.2011 06:09
---------------------------
bla-bla-bla
---------------------------
ОК
---------------------------
— это два разных процесса. Можете взять любую из последних версий Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653)'а (где есть поиск процесса посредством целеуказания окна) и убедиться в этом сами.
P.S. Закрыть множество всё появляющихся MessageBox'ов с сообщениями можно, использовав простой скрипт WSH с зарегистрированным объектом AutoItX (http://www.script-coding.com/AutiItX.html):
Option Explicit
Dim strWindowClass
Dim strControlClass
strWindowClass = "[REGEXPTITLE:Сообщение от " & WScript.CreateObject("WScript.Network").UserName & ".*; CLASS:#32770]"
strControlClass = "[CLASS:Button; INSTANCE:1]"
With WScript.CreateObject("AutoItX3.Control")
Do
If .WinExists(strWindowClass) Then
If .ControlClick(strWindowClass, "", strControlClass) Then
'
End If
End If
WScript.Sleep 10
Loop
End With
WScript.Quit 0
Я не стал его усложнять, потому, как закроются все окна сообщений, просто снимите процесс скрипта через Диспетчер задач.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.