Показать полную графическую версию : Скрипт, проверяющий программу и предлагающий ее запустить если она вырубилась
домена наверное нет (это большая локалка. То есть есть айпишники каждой кассы (где-то) »
Жаль.
P>S> если я делаю ярлык на скрипт и копирую его (к примеру) себе на свой комп, то путь к ярлыку меняется на тот,где я положил у себя на компе файл. »
Там с ярлыками много хуже — в нём, в числе прочих путей, остаётся тот абсолютный путь, с которым он был создан, включая имя машины :) (особую радость это доставляет, когда машина, где создавался ярлык, выводится из сети). Таковы особенности реализации и внутренней структуры ярлыков. Именно потому крайне рекомендуется не копировать ярлыки между машинами, а создавать ярлыки непосредственно на искомой машине.
Я бы сделал проще — добавил путь типа:
"c:\Windows\System32\wscript.exe" "C:\Мои проекты\0190\0001.vbs"
в раздел реестра, отвечающий за автозагрузку, каждой машины, либо в общий раздел автозагрузки, либо в раздел автозагрузки пользователя. Мне сложно сказать, как именно для Вас будет проще сделать.
там разные. есть винХП есть вин8 есть вин10 »
Возможно, на XP отсутствует, но это поправимо...
что такое пауершелл я хз »
Ну, например, это:
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 - плохо настраиваемая форма (вывести на передний план я не смог, знаний, наверное, маловато), но можно свою форму наваять, примерно так:
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')
koresaram
28-08-2018, 21:09
опаньки! еще нюанс вариант появился
а как добавить вызов этого скрипта в другой скрипт на вбс, который стоит в планировщике?
на кассах в планировщике есть скрипт 1.vbs который выполняется раз в минуту. Туда в него же можно включить запуск нашего скрипта?
powershell -ex bypass -w hidden -f .\script.ps1 »
В гробу я видал такую реализацию сокрытия — будучи запущен из-под Far Manager, он, ничтоже сумняшеся, нахрен скрыл его консоль :). С концами.
(вывести на передний план я не смог, »
А если так:
$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 использовать десктоп, и если допустимо — то как именно допустимо.
на кассах в планировщике есть скрипт 1.vbs который выполняется раз в минуту. Туда в него же можно включить запуск нашего скрипта? »
Зачем? Не нужно.
В гробу я видал такую реализацию сокрытия — будучи запущен из-под Far Manager, он, ничтоже сумняшеся, нахрен скрыл его консоль »
:)
Дык, это ведь не powershell виноват в том, что консоль far-а имеет свое, особое мнение и батники с powershell-ом запускает прямо в ней... хотя, так работает любая консоль, такшта и фар тут тоже, особо не виноват... :)
Но, всё же, это правильно, имхо, т.к. целью, как раз, было скрыть консоль, чтобы глаза не мозолила.
Ну и в крайнем случае, можно ведь powershell в отдельном окне запускать, через start...
А если так: »
О, спасибо!
Оказывается есть вариант... я-то потыкал гугль, но на глаза не попалось ничего аналогичного, а усиленно рыть не стал.
Дык, это ведь не powershell виноват в том, что консоль far-а имеет свое, особое мнение и батники с powershell-ом запускает прямо в ней... хотя, так работает любая консоль, такшта и фар тут тоже, особо не виноват...
Но, всё же, это правильно, имхо, т.к. целью, как раз, было скрыть консоль, чтобы глаза не мозолила. »
Проблема в том, что по завершении процесса powershell.exe последний не восстанавливает исходное состояние окна консоли.
Проблема в том, что по завершении процесса 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
DJ Mogarych
30-08-2018, 11:33
Какой ужас.
Извините за оффтоп, но не пытались ли разобраться с тем, почему вообще программа вылетает?
Зачем вообще нужно это взаимодействие с пользователем и запуск руками чего бы то ни было, если нужно, чтобы программа всегда работала?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.