Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Как прервать работу (http://forum.oszone.net/showthread.php?t=217178)

retab 05-10-2011 03:16 1766155

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

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

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

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

Заранее спасибо за ответ)

Iska 05-10-2011 06:26 1766177

Цитата:

Цитата retab
Собственно вот код: »

Цитата:

Системе не удается найти указанный диск.
Не удается найти указанную метку пакетного файла - 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

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


Время: 19:56.

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