Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Скрипт, проверяющий программу и предлагающий ее запустить если она вырубилась

Ответить
Настройки темы
VBS/WSH/JS - Скрипт, проверяющий программу и предлагающий ее запустить если она вырубилась

Старожил


Сообщения: 282
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: koresaram
Дата: 28-08-2018
Всем привет

исходные данные:
на компе должна работать программа c:programm files/proga.exe
периодически она вылетает и ее приходится запускать руками
пояснение - прога на удаленном компе и там нет мышки клавиатуры (там тач пад можно пальцем в экран ткнуть), чтобы пользователь смог зам ее запустить (мышкой и клавиатурой прогу запустить можно только из диспетчера задач). Приходится подключаться по тимке и включать им ее.

надо:
скрипт, который будет, к примеру, каждые 10 минут проверять наличие процесса proga.exe и если такой процесс не обнаружен, выводить окно на экран с предложением запустить программу Да/Нет
соответственно при нажатии на Да - запускается proga.exe а при нажатии на Нет скрипт уходит в свой обычный режим и через 10 минут снова предложит запустить прогу. И еще этот скрипт должен выключать процесс експлорера (при вылете программы этой остается окно "Мой компьютер"

Код: Выделить весь код
Option Explicit
Dim objWMIService, objProcess, colProcess
Dim strComputer, strProcessKill 
Dim WshShell
strComputer = "."
strProcessKill = "'explorer.exe'" 

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

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "c:\Program Files\PROGA.exe" & Chr(34), 0
Set WshShell = Nothing

WScript.Quit
есть вот такая штука (файл сценария VBScript). Если в нее ткнуть, то прога запускается и експлорер убирается. Вот если к ней еще интерактив прикрутить будет хорошо/

-------
настоящему корейцу завсегда везде ништяк!


Отправлено: 08:28, 28-08-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата koresaram:
домена наверное нет (это большая локалка. То есть есть айпишники каждой кассы (где-то) »
Жаль.

Цитата koresaram:
P>S> если я делаю ярлык на скрипт и копирую его (к примеру) себе на свой комп, то путь к ярлыку меняется на тот,где я положил у себя на компе файл. »
Там с ярлыками много хуже — в нём, в числе прочих путей, остаётся тот абсолютный путь, с которым он был создан, включая имя машины (особую радость это доставляет, когда машина, где создавался ярлык, выводится из сети). Таковы особенности реализации и внутренней структуры ярлыков. Именно потому крайне рекомендуется не копировать ярлыки между машинами, а создавать ярлыки непосредственно на искомой машине.

Я бы сделал проще — добавил путь типа:
Код: Выделить весь код
"c:\Windows\System32\wscript.exe" "C:\Мои проекты\0190\0001.vbs"
в раздел реестра, отвечающий за автозагрузку, каждой машины, либо в общий раздел автозагрузки, либо в раздел автозагрузки пользователя. Мне сложно сказать, как именно для Вас будет проще сделать.

Отправлено: 19:46, 28-08-2018 | #21



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата koresaram:
там разные. есть винХП есть вин8 есть вин10 »
Возможно, на XP отсутствует, но это поправимо...
Цитата koresaram:
что такое пауершелл я хз »
Ну, например, это:
script.ps1
Код: Выделить весь код
add-type -assembly system.windows.forms
$process = 'notepad'
$start = {c:\windows\notepad.exe}

do {
if (!($p = ps $process -ea 0)){
	&$start
	$p = ps $process
}
$btn = [windows.forms.messageboxbuttons]::yesno
$t1 = [Windows.Forms.MessageBoxIcon]::Question
$t2 = [Windows.Forms.MessageBoxDefaultButton]::Button1
$top = [Windows.Forms.MessageBoxOptions]::ServiceNotification # .topmost = $true

wait-process $p.id
$res = [windows.forms.messagebox]::show($process, "Запускаем файл?",$btn,$t1,$t2,$top)
} while ($res -ne 'No')
запустить можно так:
run.bat
Код: Выделить весь код
@echo off
start "" powershell -ex bypass -w hidden -f .\script.ps1
т.к. messagebox - плохо настраиваемая форма (вывести на передний план я не смог, знаний, наверное, маловато), но можно свою форму наваять, примерно так:
script.ps1
Код: Выделить весь код
add-type -assembly system.windows.forms
$process = 'notepad'
$start = {c:\windows\notepad.exe}

do {
if (!($p = ps $process -ea 0)){
	&$start
	$p = ps $process
}
$form = new-object windows.forms.form
$form.autosize = $true
$form.autosizemode = [windows.forms.autosizemode]::growandshrink
$form.formborderstyle = [windows.forms.formborderstyle]::fixedtoolwindow
$form.controlbox = $false
$form.sizegripstyle = [windows.forms.sizegripstyle]::hide
$form.text = 'Запустить' + ' ' + $process + '?'
$form.showintaskbar = $false
$form.topmost = $true
$form.startposition = 'CenterScreen'


$btnyes = new-object windows.forms.button
$btnyes.text = 'Да'
$btnyes.location = new-object system.drawing.point(3,10)
$btnyes.dialogresult = [windows.forms.dialogresult]::ok
$form.controls.add($btnyes)

$btnno = new-object windows.forms.button
$btnno.text = 'Нет'
$btnno.location = new-object system.drawing.point(110,10)
$btnno.dialogresult = [windows.forms.dialogresult]::no
$form.controls.add($btnno)

wait-process $p.id
$res = $form.showdialog()
} while ($res -ne 'No')

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 28-08-2018 в 21:56. Причина: поправил код

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:23, 28-08-2018 | #22


Старожил


Сообщения: 282
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


опаньки! еще нюанс вариант появился
а как добавить вызов этого скрипта в другой скрипт на вбс, который стоит в планировщике?
на кассах в планировщике есть скрипт 1.vbs который выполняется раз в минуту. Туда в него же можно включить запуск нашего скрипта?

-------
настоящему корейцу завсегда везде ништяк!


Отправлено: 21:09, 28-08-2018 | #23


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
powershell -ex bypass -w hidden -f .\script.ps1 »
В гробу я видал такую реализацию сокрытия — будучи запущен из-под Far Manager, он, ничтоже сумняшеся, нахрен скрыл его консоль . С концами.


Цитата YuS_2:
(вывести на передний план я не смог, »
А если так:
Код: Выделить весь код
$res = [Windows.Forms.MessageBox]::Show($process, "Запускаем файл?", $btn, [Windows.Forms.MessageBoxIcon]::Question, [Windows.Forms.MessageBoxDefaultButton]::Button1, [Windows.Forms.MessageBoxOptions]::ServiceNotification)
?

Самым правильным, конечно, было бы использование перегрузки метода с использованием первым параметром следующего:
Цитата:
owner
IWin32Window

An implementation of IWin32Window that will own the modal dialog box.
но я не знаю, допустимо ли в качестве IWin32Window использовать десктоп, и если допустимо — то как именно допустимо.

Цитата koresaram:
на кассах в планировщике есть скрипт 1.vbs который выполняется раз в минуту. Туда в него же можно включить запуск нашего скрипта? »
Зачем? Не нужно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:24, 28-08-2018 | #24


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
В гробу я видал такую реализацию сокрытия — будучи запущен из-под Far Manager, он, ничтоже сумняшеся, нахрен скрыл его консоль »

Дык, это ведь не powershell виноват в том, что консоль far-а имеет свое, особое мнение и батники с powershell-ом запускает прямо в ней... хотя, так работает любая консоль, такшта и фар тут тоже, особо не виноват...
Но, всё же, это правильно, имхо, т.к. целью, как раз, было скрыть консоль, чтобы глаза не мозолила.
Ну и в крайнем случае, можно ведь powershell в отдельном окне запускать, через start...
Цитата Iska:
А если так: »
О, спасибо!
Оказывается есть вариант... я-то потыкал гугль, но на глаза не попалось ничего аналогичного, а усиленно рыть не стал.

-------
scio me nihil scire. Ѫ


Отправлено: 21:47, 28-08-2018 | #25


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Дык, это ведь не powershell виноват в том, что консоль far-а имеет свое, особое мнение и батники с powershell-ом запускает прямо в ней... хотя, так работает любая консоль, такшта и фар тут тоже, особо не виноват...
Но, всё же, это правильно, имхо, т.к. целью, как раз, было скрыть консоль, чтобы глаза не мозолила. »
Проблема в том, что по завершении процесса powershell.exe последний не восстанавливает исходное состояние окна консоли.

Отправлено: 21:56, 28-08-2018 | #26


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Iska:
Проблема в том, что по завершении процесса powershell.exe последний не восстанавливает исходное состояние окна консоли. »
Кстати, откопал, среди хлама, ватчдог слежения за каталогом, который когда-то делал... вот ведь память старческая моя, там ведь есть messagebox аналогичный, с опциями [Windows.Forms.MessageBoxOptions]::ServiceNotification...
И там же есть запуск скрытых консолей powershell и он там именно через батник с командами start "", так что вполне себе вариант, т.к. консоль из которой происходит запуск, остается нетронутой. И на всякий случай, там же, есть скрипт прибития скрытых консолей:
Код: Выделить весь код
$p = get-wmiobject win32_process -filter "name='powershell.exe'"|%{if($_.commandline -match 'hid'){$_.processid}}
kill -id $p

-------
scio me nihil scire. Ѫ


Отправлено: 22:36, 28-08-2018 | #27


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6493
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Какой ужас.
Извините за оффтоп, но не пытались ли разобраться с тем, почему вообще программа вылетает?
Зачем вообще нужно это взаимодействие с пользователем и запуск руками чего бы то ни было, если нужно, чтобы программа всегда работала?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 11:33, 30-08-2018 | #28



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Скрипт, проверяющий программу и предлагающий ее запустить если она вырубилась

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - проверять запущена программа, а если она запущена то закрывать ее DetFedot Скриптовые языки администрирования Windows 4 26-02-2018 15:32
CMD/BAT - [решено] Проверка запущена ли программа, если нет то запустить ее... Svnkill Скриптовые языки администрирования Windows 2 12-02-2018 13:18
CMD/BAT - [решено] Как запустить программу и тут же ее убить? Pozia Скриптовые языки администрирования Windows 1 20-08-2015 12:47
Кто знает такой сканер, программу Hitman Pro ? Она надежная не вирус ли она сама? micro8 Лечение систем от вредоносных программ 0 22-09-2010 13:08
Как запустить программу, чтобы пользователь ее невидел? Kvasia Microsoft Windows 2000/XP 11 06-05-2006 02:24




 
Переход