Войти

Показать полную графическую версию : [решено] Мониторинг процесса в диспетчере задач и запуск его в случае отсутствия


Страниц : 1 [2] 3

Wu-Tang
29-12-2015, 13:07
Iska,
но проверки то не будет, запущен ли процесс
и как сказал Fantastish, накладываться будет каждый раз

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

Iska
29-12-2015, 15:53
Iska,
но проверки то не будет, запущен ли процесс
и как сказал Fantastish, накладываться будет каждый раз »
Почему у меня не накладывается?

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

Wu-Tang
29-12-2015, 21:13
Iska,
у меня накладывается, могу видео записать.
нет, процесс будет запускаться не первый раз, тк первый это из автозагрузки, а потом должен будет запускаться, если из него выйдут случайно.

Iska
30-12-2015, 03:45
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
Iska,
во, спасибо, все работает.

selftrips.ru
01-08-2016, 16:52
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
если программа firefox запускается посредством bat с параметром? »
Покажите код пакетного файла. Возможно, он и не понадобится.

selftrips.ru
04-08-2016, 04:45
написал, это как раз bat
cd " C:\Program Files (x86)\Mozilla Firefox"
start firefox imacros://run/?m=main.js

Iska
04-08-2016, 06:07
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
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
selftrips.ru, в скрипте ожидается завершение работы именно того самого процесса, который и был запущен. И никакого другого. Посему — делайте два скрипта, каждый со своей командной строкой для «firefox.exe», и исполняйте оба (если сам Firefox такое позволяет).

А что дает переход на 64 битную версию? »
Больший доступный объём оперативной памяти для процесса.

selftrips.ru
04-08-2016, 16:49
1. Как убить запущенный код VBS?
2. Те не смотря на то что в диспетчере зададч оба процесс имеют одно название, реально код понимает что это разные процессы?

Iska
04-08-2016, 17:10
1. Как убить запущенный код VBS? »
В Диспетчере задач.

2. Те не смотря на то что в диспетчере зададч оба процесс имеют одно название, реально код понимает что это разные процессы? »
\Вид\Выбрать столбцы, «ИД процесса».

selftrips.ru
04-08-2016, 17:31
1.Как он должен называться в диспетчере задач?
2,Т.е. контролируется ид процесса (я правильно понимаю что он каждый раз разный?)?

selftrips.ru
04-08-2016, 18:01
Напишите, плиз, вариант кода для

firefox.exe imacros://run/?m=macros1.js -p profil1 -no-remote

Где кавычки ставить?)))

Iska
04-08-2016, 18:47
1.Как он должен называться в диспетчере задач? »
«wscript.exe», если не меняли стандартный сервер сценариев.

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

Напишите, плиз, вариант кода для
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
«wscript.exe», если не меняли стандартный сервер сценариев. »
не менял, но такого процесса не могу найти (WIN10)

Iska
04-08-2016, 20:49
Покажите скриншот Диспетчера задач с процессами («Alt-PrintScreen»).

selftrips.ru
05-10-2016, 06:47
Если запущено несколько wscript.exe можно ли как то сделать чтобы они как то различались в диспетчере задач?
Спасибо

Iska
05-10-2016, 15:43
Если запущено несколько wscript.exe можно ли как то сделать чтобы они как то различались в диспетчере задач? »
Они и так различаются — идентификатором процесса, временем запуска, возможно — командной строкой.




© OSzone.net 2001-2012