CMD/BAT - Как прервать работу

Ответить
Аватара пользователя
retab

CMD/BAT - Как прервать работу

Сообщение retab »

Недавно создавал небольшой батник и из-за ошибки, нашел интересный баг (возможно это не баг). Собственно вот код:



Код:

Код: Выделить всё

a:
msg * "bla-bla-bla"
goto a

Даже при закрытии окна cmd эта команда будет выполнятся. Если вместо msg * "bla-bla-bla" ввести start, то собственно начинает открывать новые окна cmd, причем как это отключить я так и не понял. На 700 окнах комп лег (хотя, возможно, все еще их открывал).



Так вот, как выйти, ну или завершить данный процес? В деспетчере задач он не отображается, точнее он скрыт в csrss.exe и используется из него. Ясное дело, что килять его это черевато последствиями, была мысля отследить его в потоках, но как-то боязно не то кильнуть.



Заранее спасибо за ответ)
Аватара пользователя
Iska

Re: CMD/BAT - Как прервать работу

Сообщение Iska »

Цитата retab:



Собственно вот код:
CMD/BAT - Как прервать работу





Цитата:



Системе не удается найти указанный диск.

Не удается найти указанную метку пакетного файла - 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
'а (где есть поиск процесса посредством целеуказания окна) и убедиться в этом сами.




читать дальше »


P.S. Закрыть множество всё появляющихся MessageBox'ов с сообщениями можно, использовав простой скрипт WSH с зарегистрированным объектом
AutoItX
:



Код:

Код: Выделить всё

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

Я не стал его усложнять, потому, как закроются все окна сообщений, просто снимите процесс скрипта через Диспетчер задач.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»