Компьютерный форум 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=222275)

yago 06-12-2011 12:12 1810238

Мониторинг процесса в диспетчере задач и запуск его в случае отсутствия
 
Добрый день.

есть задача добавить к загрузке скрипт который будет висеть в памяти и мониторить присутствие процесса - а в случае его закрытия "случайно" - его запуск.

процесс 'iexplore.exe' с ключом '-k'

вмешательство пользователей в диспетчер задач отсутствует.

Самому знаний возможно хватило бы что бы скопировать нужное из др. скриптов и связать в один скрипт, но на это уйдет время, а его увы нет.

Iska 06-12-2011 12:30 1810252

Цитата:

Цитата yago
процесс 'iexplore.exe' с ключом '-k' »

вкупе с:
Цитата:

Цитата yago
а в случае его закрытия "случайно" - его запуск. »

Зачем? И что значит — «случайно»? Как можно случайно закрыть окно без кнопки закрытия?!

RostVY 06-12-2011 14:59 1810357

Цитата:

Цитата Iska
Как можно случайно закрыть окно без кнопки закрытия »

Alt+F4, <script type="text/javascript">window.close();</script>

Iska 06-12-2011 16:06 1810401

RostVY, «Alt-F4» случайно не нажимают.

yago 06-12-2011 23:58 1810686

слово "случайно" было взято в кавычки, что бы конкретно указать что это было вызвано пользователем, объект настройки и добавления скрипта в загрузку - ПК инфо киоск с ФЗС с загрузкой настраимового интерфейса, чувствую что в вопросе больше подозрений чем интереса в действительной помощи.
Если загрузить ПК с настраиваемым интерфейсом "iexplore.exe -k" загрузится страница эксплорера, с максимально ограниченным доступом к системе, при наличии постоянного интернет соединения конечно, но вот если страницу закрыть по ALT-F4 - останется только синий экран, и ни какой возможности загрузки эксплорера без перезахода в систему, что не есть гуд.

Вроде подробно ответил? Сомнения Развеял?

Iska 07-12-2011 06:59 1810787

Цитата:

Цитата yago
чувствую что в вопросе больше подозрений чем интереса в действительной помощи. »

yago, сожалею, но приходится. Надо хотя бы банально спросить, зачем человеку такое нужно. Ибо в моей практике «неописуемые случаи» имели место быть.


Что ж, пробуйте:
Код:

Option Explicit

Dim lngProcessID

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        Do
                If .Get("Win32_Process").Create( _
                        """C:\Program Files\Internet Explorer\iexplore.exe"" -k ""file://C:\WINDOWS\Help\Tours\htmlTour\default.htm""", _
                        Null, Null, lngProcessID) = 0 Then
                       
                        .ExecNotificationQuery( _
                                "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
                                "TargetInstance ISA 'Win32_Process' AND " & _
                                "TargetInstance.ProcessID = '" & CStr(lngProcessID) & "'").NextEvent
                Else
                        ' Не удалось запустить процесс
                        Exit Do
                End If
        Loop
End With

WScript.Quit 0

Здесь:
Код:

"""C:\Program Files\Internet Explorer\iexplore.exe"" -k ""file://C:\WINDOWS\Help\Tours\htmlTour\default.htm"""
— путь к IE, параметр режима киоска и путь к локальному файлу html.

Вкратце: подключаемся к локальному Wbem, пытаемся запустить IE. Если запуск был удачен — ждём, пока не будет завершён процесс IE, затем запускаем новый процесс IE. И так — по кругу. Если же вдруг запуск процесса IE оказался неудачен — выходим из цикла и завершаем работу скрипта.

yago 07-12-2011 08:34 1810811

Спасибо! Попробую сразу скажу получилост или нет.

yago 07-12-2011 09:22 1810837

Все проверил, замечательный скрипт, Большое спасибо! В купе с ФЗС универсальное средство непотопляемости инфо киоска :)

P.S. Насколько я понимаю, скрипт создает процесс iexplore с параметрами заданными в скрипте и сопровождает его, в случае закрытия - просто "реанимирует" его - я правильно понимаю суть?

Iska 07-12-2011 09:53 1810850

Цитата:

Цитата yago
В купе с ФЗС »

Что есть «ФЗС»?


Цитата:

Цитата yago
Насколько я понимаю, скрипт создает процесс iexplore с параметрами заданными в скрипте и сопровождает его, в случае закрытия - просто "реанимирует" его - я правильно понимаю суть? »

Суть — да, понимаете верно.

Если есть интерес, можете посмотреть на это обсуждение: vbscript: сценарий входа, выполнение только 1й программы, где ставится сходная задача, только в более общем виде.

yago 07-12-2011 10:00 1810854

ФЗС - физически замкнутая среда, строится на групповых политиках, применяются несколько параметров для ограничей действий пользователей. как то - отсутсвие возможности вызова контекстного меню, отсутствия возможности изменить параметры среды, и тд. и т.п. Никаких внешних программ, исключительно штатными средствами операционной системы. Скрипт проверил на WIN7 все пучком. Еще раз спасибо!

Iska 07-12-2011 12:21 1810918

Цитата:

Цитата yago
ФЗС - физически замкнутая среда… »

yago, спасибо, ясно.

Wu-Tang 17-12-2015 19:59 2585855

Iska,
взял ваш скрипт, но с правкой не въеду
надо чтоб проверялось раз в 30мин запущен ли teamviewer, если нет, то запускал бы
поправил путь
Код:

Option Explicit

Dim lngProcessID

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".",

"root\cimv2")
        Do
                If .Get("Win32_Process").Create( _
                        """C:\Program Files (x86)\TeamViewer\TeamViewer.exe"" -k

""file://C:\WINDOWS\Help\Tours\htmlTour\default.htm""", _
                        Null, Null, lngProcessID) = 0 Then
                       
                        .ExecNotificationQuery( _
                                "SELECT * FROM __InstanceDeletionEvent WITHIN 1

WHERE " & _
                                "TargetInstance ISA 'Win32_Process' AND " & _
                                "TargetInstance.ProcessID = '" &

CStr(lngProcessID) & "'").NextEvent
                Else
                        ' Не удалось запустить процесс
                        Exit Do
                End If
        Loop
End With

WScript.Quit 0

но что-то не уверен, что этого достаточно.

Wu-Tang 21-12-2015 19:54 2587160

нашел скрипт для планировщика, Петя васечкин приводил
Код:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

Set colProcesses = objWMIService.ExecQuery( _
    "Select Name From Win32_Process " _
    & "Where Name = 'notepad.exe'")

If colProcesses.Count = 0 Then
  Set objShell = Wscript.CreateObject("Wscript.Shell")
  objShell.Run "notepad.exe"
End If

но не пойму как его переделать по teamviewer

Wu-Tang 23-12-2015 23:34 2587874

господа, никто не поможет?

Iska 24-12-2015 00:26 2587879

Wu-Tang, постоянная проблема, что люди не описывают задачу, а уже выбранное ими решение. При этом остаётся только догадываться, какая именно это задача, и строить выводы о том, насколько удачно это озвученное решение.

Вот, например, в Вашем случае я не вижу, почему бы Вам просто тупо не запускать приложение раз в тридцать минут? По выбранному и озвученному Вами решению — этого достаточно. Безо всяких скриптов. А вот что на самом деле нужно, какая в реальности стоит задача — остаётся неизвестным. То ли, действительно, раз в тридцать минут запускать приложение, то ли находить уже запущенное приложение, следить за ним и тотчас же перезапускать его при закрытии, то ли запускать приложение самим скриптом, следить и перезапускать его (проще и надёжнее в реализации).

Опишите задачу.

Wu-Tang 24-12-2015 06:44 2587917

Iska,
хорошо, все просто.
есть задача - проверять через определенные промежутки времени запущен ли тимвьювер и если нет, то запускать.
либо из планировщика, либо само по себе.

Wu-Tang 28-12-2015 14:12 2589106

Iska,
ну так как поможите?

Iska 28-12-2015 16:28 2589179

Wu-Tang, ещё раз — чем Вас не устраивает обычный Планировщик: выполнять задание ежедневно, каждые 30 минут, в течение 24 часов? Это полностью решает описанную Вами задачу. Без какого-либо использования скриптов.

Fantastish 28-12-2015 16:51 2589186

Могу предположить, что может там многократно ТМ вылезет или будет просто вылазить по верх всех окон

Iska 29-12-2015 03:35 2589349

Fantastish, не предполагайте. Проверьте. Как это сделал я.

Wu-Tang 29-12-2015 13:07 2589484

Iska,
но проверки то не будет, запущен ли процесс
и как сказал Fantastish, накладываться будет каждый раз

проверил запуск поверх запущенного процесса, главное окно тогда вылазит поверх всех окон.

Iska 29-12-2015 15:53 2589547

Цитата:

Цитата Wu-Tang
Iska,
но проверки то не будет, запущен ли процесс
и как сказал Fantastish, накладываться будет каждый раз »

Почему у меня не накладывается?

Цитата:

Цитата Wu-Tang
проверил запуск поверх запущенного процесса, главное окно тогда вылазит поверх всех окон. »

Так Вы «процесс» запускайте в первый раз именно как задачу из «Назначенных заданий». Тогда никакого повторного запуска не будет, пока не закрыто приложение. Или опять я не так понимаю?

Wu-Tang 29-12-2015 21:13 2589644

Iska,
у меня накладывается, могу видео записать.
нет, процесс будет запускаться не первый раз, тк первый это из автозагрузки, а потом должен будет запускаться, если из него выйдут случайно.

Iska 30-12-2015 03:45 2589705

Wu-Tang, так, теперь ясно. Насколько я понимаю, само приложение даже при указании запускать в свёрнутом окне тупо разворачивает своё окно до нормального состояния, и тут ничего не поделаешь.

Могу тогда разве что предложить скрипт, который будет сам запускать процесс, следить за ним, и при его завершении — тут же запускать новый экземпляр приложения (т.н., «псевдо-неубиваемый» процесс). И Вы будете помещать в автозагрузку уже ярлык не на приложение, а на этот скрипт.

Попробуйте так:
Код:

Option Explicit

Const SW_SHOWMINNOACTIVE = 7

Dim objSWbemObjectEx
Dim lngProcessID


With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        Set objSWbemObjectEx = .Get("Win32_ProcessStartup").SpawnInstance_
        objSWbemObjectEx.ShowWindow = SW_SHOWMINNOACTIVE

        Do
                If .Get("Win32_Process").Create( _
                        """C:\Program Files (x86)\TeamViewer\TeamViewer.exe""", Null, objSWbemObjectEx, lngProcessID _
                ) = 0 Then
                       
                        .ExecNotificationQuery( _
                                "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
                                "TargetInstance ISA 'Win32_Process' AND " & _
                                "TargetInstance.ProcessID = '" & CStr(lngProcessID) & "'").NextEvent
                Else
                        ' Не удалось запустить процесс
                        Exit Do
                End If
        Loop
       
        Set objSWbemObjectEx = Nothing
End With

WScript.Quit 0


Wu-Tang 06-01-2016 01:35 2591590

Iska,
во, спасибо, все работает.

selftrips.ru 01-08-2016 16:52 2655960

Код:

Option Explicit

Dim lngProcessID

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        Do
                If .Get("Win32_Process").Create( _
                        """C:\Program Files\Internet Explorer\iexplore.exe"" -k ""file://C:\WINDOWS\Help\Tours\htmlTour\default.htm""", _
                        Null, Null, lngProcessID) = 0 Then
                       
                        .ExecNotificationQuery( _
                                "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
                                "TargetInstance ISA 'Win32_Process' AND " & _
                                "TargetInstance.ProcessID = '" & CStr(lngProcessID) & "'").NextEvent
                Else
                        ' Не удалось запустить процесс
                        Exit Do
                End If
        Loop
End With

WScript.Quit 0

Как надо модифицировать код если программа firefox запускается посредством bat с параметром? (и надо проверять запущен ли firefox и если нет - запускать с параметром )
Код:

cd " C:\Program Files (x86)\Mozilla Firefox"
start firefox imacros://run/?m=main.js

или что бы проверялась одна прога (firefox) а запускалась другая (bat файл)
Спасибо

Iska 01-08-2016 18:26 2655972

Цитата:

Цитата selftrips.ru
если программа firefox запускается посредством bat с параметром? »

Покажите код пакетного файла. Возможно, он и не понадобится.

selftrips.ru 04-08-2016 04:45 2656715

написал, это как раз bat
Код:

cd " C:\Program Files (x86)\Mozilla Firefox"
start firefox imacros://run/?m=main.js


Iska 04-08-2016 06:07 2656719

selftrips.ru, попробуйте так:
Код:

Option Explicit

Dim lngProcessID

With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        Do
                If .Get("Win32_Process").Create( _
                        """C:\Program Files (x86)\Mozilla Firefox\firefox.exe"" imacros://run/?m=""main.js""", _
                        Null, Null, lngProcessID) = 0 Then
                       
                        .ExecNotificationQuery( _
                                "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
                                "TargetInstance ISA 'Win32_Process' AND " & _
                                "TargetInstance.ProcessID = '" & CStr(lngProcessID) & "'").NextEvent
                Else
                        ' Не удалось запустить процесс
                        Exit Do
                End If
        Loop
End With

WScript.Quit 0

P.S. Firefox уже есть в x64-версии.
P.P.S. С вышедшей вчера версией могут быть проблемы из-за начала ограниченной поддержки ей многопроцессного режима.

selftrips.ru 04-08-2016 14:41 2656862

Цитата:

Цитата Iska
selftrips.ru, попробуйте так: »

Своде работает. Спасибо.
А еще более сложную задачу можно решить?
Имеется 2 разных процесса firefox, каждый запущен со своего профиля и со своей строкой параметров, например:
firefox.exe imacros://run/?m=macros1.js -p profil1 -no-remote
firefox.exe imacros://run/?m=macros2.js -p profil2 -no-remote,
где macros1.js, macros2.js imacrocs для каждого профиля. (вообще macros1 иmacros2 могут иметь одинаковые названия, так как каждый лежит в папке своего профиля)
profil1 , profil2 название профилей.

Можно организовать контроль "запущенности" именно firefox определенного профиля, и при его отсутствии запускать с нужного профиля с нужной строкой параметров (при этом может выполняьться firefox другого профиля)
Если это возможно, как контролировать оба запуска?



P.S. "Firefox уже есть в x64-версии." А что дает переход на 64 битную версию?

Iska 04-08-2016 16:35 2656892

selftrips.ru, в скрипте ожидается завершение работы именно того самого процесса, который и был запущен. И никакого другого. Посему — делайте два скрипта, каждый со своей командной строкой для «firefox.exe», и исполняйте оба (если сам Firefox такое позволяет).

Цитата:

Цитата selftrips.ru
А что дает переход на 64 битную версию? »

Больший доступный объём оперативной памяти для процесса.

selftrips.ru 04-08-2016 16:49 2656896

1. Как убить запущенный код VBS?
2. Те не смотря на то что в диспетчере зададч оба процесс имеют одно название, реально код понимает что это разные процессы?

Iska 04-08-2016 17:10 2656907

Цитата:

Цитата selftrips.ru
1. Как убить запущенный код VBS? »

В Диспетчере задач.

Цитата:

Цитата selftrips.ru
2. Те не смотря на то что в диспетчере зададч оба процесс имеют одно название, реально код понимает что это разные процессы? »

\Вид\Выбрать столбцы, «ИД процесса».

selftrips.ru 04-08-2016 17:31 2656918

1.Как он должен называться в диспетчере задач?
2,Т.е. контролируется ид процесса (я правильно понимаю что он каждый раз разный?)?

selftrips.ru 04-08-2016 18:01 2656926

Напишите, плиз, вариант кода для

Код:

firefox.exe imacros://run/?m=macros1.js -p profil1 -no-remote
Где кавычки ставить?)))

Iska 04-08-2016 18:47 2656932

Цитата:

Цитата selftrips.ru
1.Как он должен называться в диспетчере задач? »

«wscript.exe», если не меняли стандартный сервер сценариев.

Цитата:

Цитата selftrips.ru
2,Т.е. контролируется ид процесса (я правильно понимаю что он каждый раз разный?)? »

Да.

Цитата:

Цитата selftrips.ru
Напишите, плиз, вариант кода для
Код:

firefox.exe imacros://run/?m=macros1.js -p profil1 -no-remote
Где кавычки ставить?))) »

Здесь:
Код:

                If .Get("Win32_Process").Create( _
                        """C:\Program Files (x86)\Mozilla Firefox\firefox.exe"" imacros://run/?m=""macros1.js"" -p profil1 -no-remote", _
                        Null, Null, lngProcessID) = 0 Then


selftrips.ru 04-08-2016 19:19 2656943

Цитата:

Цитата Iska
«wscript.exe», если не меняли стандартный сервер сценариев. »

не менял, но такого процесса не могу найти (WIN10)

Iska 04-08-2016 20:49 2656958

Покажите скриншот Диспетчера задач с процессами («Alt-PrintScreen»).

selftrips.ru 05-10-2016 06:47 2675177

Если запущено несколько wscript.exe можно ли как то сделать чтобы они как то различались в диспетчере задач?
Спасибо

Iska 05-10-2016 15:43 2675334

Цитата:

Цитата selftrips.ru
Если запущено несколько wscript.exe можно ли как то сделать чтобы они как то различались в диспетчере задач? »

Они и так различаются — идентификатором процесса, временем запуска, возможно — командной строкой.

selftrips.ru 05-10-2016 20:55 2675402

Подскажите еще плиз. в вашем коде есть "C:\Program Files (x86)\Mozilla" , но я обновил FF и он стал 64 разрядным. Но скрипт продолжает работать. Это нормально?

Iska 05-10-2016 21:13 2675409

Цитата:

Цитата selftrips.ru
но я обновил FF и он стал 64 разрядным »

Такое разве нынче возможно? Подобное поведение было в первых версиях x64-версии, и являлось подтверждённой ошибкой инсталлятора. А нынче, судя по: How to switch from 32-bit to 64-bit Firefox | Firefox Help — x64 должна была установиться в %ProgramFiles%, а не обновлять в %ProgramFiles(x86)%.

NLOLegion 21-11-2021 10:06 2972668

Цитата:

Цитата Iska
Попробуйте так: »

Не пойму почему у меня не выходит подставив в ваш код путь для другой программы... Я понимаю что это детский сад, но не выходит, чтобы процесс мониторился. Что нужно менять, чтобы любой процесс можно было мониторить и запускать если он "сдох по неведомым причинам"?
Код:

Option Explicit

Const SW_SHOWMINNOACTIVE = 7

Dim objSWbemObjectEx
Dim lngProcessID


With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
        Set objSWbemObjectEx = .Get("Win32_ProcessStartup").SpawnInstance_
        objSWbemObjectEx.ShowWindow = SW_SHOWMINNOACTIVE

        Do
                If .Get("Win32_Process").Create( _
                        """C:\Windows\System32\notepad.exe""", Null, objSWbemObjectEx, lngProcessID _
                ) = 0 Then
                       
                        .ExecNotificationQuery( _
                                "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE " & _
                                "TargetInstance ISA 'Win32_Process' AND " & _
                                "TargetInstance.ProcessID = '" & CStr(lngProcessID) & "'").NextEvent
                Else
                        ' Не удалось запустить процесс
                        Exit Do
                End If
        Loop
       
        Set objSWbemObjectEx = Nothing
End With

WScript.Quit 0

Блокнот мне неважен, пробовал на разных програмах, но не вышло сделать программу(процесс) псевдонеубиваемым.

Iska 21-11-2021 23:53 2972735

Что за приложение? Какой путь?


Время: 21:28.

Время: 21:28.
© OSzone.net 2001-