Показать полную графическую версию : [решено] Помогите начинающему: как автоматически отменить перезагрузку компа
Уважаемые Мастера! Подскажите:
Есть программа которая по окончании запрашивает перезагрузку компьютера.
Вот скриншот.
Какой можно написать ВАТ-файл или скрипт, чтобы он автоматически ответил "НЕТ"?
Система - Windows 98SE.
Просьба сильно не пинать, если это просто. Пол дня сижу в нете и ничего похожего не нашел.
Может не там смотрел?
cambit, я бы попробовал такое: Параметры командной строки, которые поддерживаются обновлениями, разработанными с помощью технологии Iexpress (http://support.microsoft.com/kb/197147/).
<имя файла обновления>.exe /q /r:n
Во всяком случае, на нашедшемся у меня обновлении KB239887 сие работает.
Спасибо! оно!!!
Но у меня есть еще один вопрос.
Таких файлов обновлений всего 21. Хочу одним ВАТ-файлом запустить их все по очереди (один установился - запускается следующий и т.д. ) Ткните носом где почитать!
Попробуйте так:
start /wait <имя файла обновления1>.exe /q /r:n
start /wait <имя файла обновления2>.exe /q /r:n
…
start /wait <имя файла обновленияN>.exe /q /r:n
Но допустима ли и возможна ли таким образом корректная установка всей цепочки обновлений — не знаю. По крайней мере, постарайтесь «ручками» выстроить порядок обновления в порядке, обратном свежести выхода обновлений; т.е. от старых — к новым.
Iska, всегда считал, что команда:start /wait install.exe эквивалентна команде:install.exe и не дает ни каких преимуществ. Или я ошибаюсь!?Таких файлов обновлений всего 21. Хочу одним ВАТ-файлом запустить их все по очереди (один установился - запускается следующий и т.д. ) »
Если запускаемое приложение не запускает дочерний процесс и при этом не закрывают основной, то второе приложение запустится только по завершению первого, но если приложение закроет свой основной процесс и продолжит выполнять дочерний, то второе приложение запустится не дожидаясь окончания установки первого. Все будет зависеть от ваших приложений и их особенностей.
Спасибо!! Очень интересно, вникаю.
Но аппетит приходит во время еды. Теперь закралась мысль все это сделать с помощью скриптов.
Да еще что бы выскакивало сообщение типа "Устанавливается обновление 1 из 21" затем после выполнения его установки оно автоматически закрывалось, появлялось следующее "Устанавливается обновление 2 из 21" и т.д. а в конце типа "Все ОК, Перезагрузить компьютер? "
Где можно прочитать оспособах вывода сообщения на екран?
cambit, а консольное окно с такой информацией в виде списка не устраивает? Поищите ключи у устанавливаемых обновлений, возможно есть ключ для отображения хода установки без кнопок (может быть /q:u) и тогда не надо ни чего изобретать.
PS
Можете попробовать так:@Echo Off
Setlocal EnableDelayedExpansion
Title Setup UpDate
nircmdc cmdwait 100 win min ititle "Setup UpDate"
For %%J In (
"UpDate 1.exe"
"UpDate 2.exe"
"UpDate 3.exe"
"UpDate 4.exe"
"UpDate 5.exe"
"UpDate 6.exe"
"UpDate 7.exe"
"UpDate 8.exe"
"UpDate 9.exe"
"UpDate 10.exe"
"UpDate 11.exe"
"UpDate 12.exe"
"UpDate 13.exe"
"UpDate 14.exe"
"UpDate 15.exe"
"UpDate 16.exe"
"UpDate 17.exe"
"UpDate 18.exe"
"UpDate 19.exe"
"UpDate 20.exe"
"UpDate 21.exe"
) Do (
Set /a cnt+=1
Start "" /b nircmdc infobox "Устанавливается %%~J [!cnt! из 21]" "Установка обновлений"
%%J /q /r:n
nircmdc dlg "" "Установка обновлений" click Yes
)
nircmdc qboxcom "Установка обновлений завершена.~nПерезагрузить компьютер?" "Перезагрузка компьютера" exitwin reboot
Exit
Имена файлов впишете свои, утилиту nircmdc (http://www.nirsoft.net/utils/nircmd.html) и скрипт положите рядом с файлами обновлений.
PPS
Нужна будет русская справка по nircmd, стучите в ПМ, поделюсь.
Не проходит именно по вот этой причине:
Если запускаемое приложение не запускает дочерний процесс и при этом не закрывают основной, то второе приложение запустится только по завершению первого, но если приложение закроет свой основной процесс и продолжит выполнять дочерний, то второе приложение запустится не дожидаясь окончания установки первого. Все будет зависеть от ваших приложений и их особенностей. »
А там два процесса - сначала распаковка архива а потом собственно обновление.
там два процесса - сначала распаковка архива а потом собственно обновление »
Тогда есть два варианта:
1 Знать имя второго процесса и, если оно постоянное у всех обновлений, то организовывать цикл и ждать завершения этого процесса. Это и будет сигналом о завершении установки данного обновления, а после него переходить к следующему.
2 Оставить включенными окна с предложением перезагрузки и, если оно есть у всех обновлений и заголовок у него постоянный, то ждать в цикле появления этого окна, посылать с помощью nircmd в окно команду "No", и переходить к следующему обновлению.
Спасибо за поощь и участие! Пробую справиться с задачей с помощью vbs-скриптов.
Подбросьте пример принудительного закрытия окна, открытого командой Popup или Msgbox.
и вообще можно ли создать такое окошко без каких либо кнопок?
Iska, всегда считал, что команда:
start /wait install.exe
эквивалентна команде:
install.exe
и не дает ни каких преимуществ. Или я ошибаюсь!? »
Я попробовал посмотреть — думаю, Вы правы: не зависимо от того, запускается ли из пакетного файла просто «<имя файла обновления1>.exe /q /r:n», либо же «start /wait <имя файла обновления1>.exe /q /r:n» — в том и другом случае происходит запуск обновления через «start.exe» (в Win9x — это отдельная утилита, а не команда командного процессора).
Насчёт же ожидания, увы, не могу утверждать наверняка ни да, ни нет, поскольку оценивал «на глаз» посредством Process Explorer, вследствие того, что не нашёл ничего аналогичного Process Monitor, работающего под Win9x (кстати, может Вы знаете и подскажите?). На взгляд — ожидает, но я нашёл у себя только три мелких обновления для Win9x, а этого маловато, чтобы говорить определённо.
Вариант из поста #7 (http://forum.oszone.net/post-1349318-7.html), конечно, хорош, но он рассчитан на cmd.exe, которого в Win9x, понятное дело, нет. Так что, на мой взгляд, «/q /r:n» вполне хватает (ну, конечно, кого-то может просто раздражать само окно консоли, понимаю).
gora, ещё вопрос, возможно, Вы в курсе: я, интереса ради, попробовал запустить qchain.exe от W2K (KB815062) под Win9x для целей, описанных в KB296861 (с другой стороны, даже не знаю, было ли такое непосредственно под Win9x, и, вообще, актуально ли там такое). Запускаться — запускается, а, вот, проверить, корректно ли отрабатывает — опять же не могу, вследствие слишком малой базы обновлений, в которых нет пересекающихся файлов. Вы не пробовали такое?
Iska, я уже давно ушел с Win9x и вряд ли смогу ответить на ваши вопросы, даже про cmd.exe не подумал... :(
gora, спасибо, ясно. Для меня эти вопросы тоже больше риторические; держу так, на всякий случай, развёрнутую систему под виртуальной машиной.
Попробовал, выкладываю.
В случае запуска BAT-файла с командами :
Upd1.exe
Upd2.exe
Upd3.exe и т.д.
Выполняются все сразу,
а через start /wait - ждет окончания.
Как проверил? Убрал ключ /r:n и в первом случае почти сразу вывалилось несколько предложений о перезагрузке, а во втором - сначала одно, нажимаю "НЕТ", потом другоеи т.д.
Так что Iska прав.
Что касается очередности запуска - я думаю поступлю таким образом - я записал последовательность установки с Windows Update, в таком порядке и буду запускать.
Мастера! Подскажите, возможно ли написать Bat-файл таким образом, чтобы при выполнении установки первого файла в экране консоли появилась надпись "Установка обновления 1", (это я знаю как), а после завершения в этой же строке добавилось "ОК!", потом с новой строки "Установка обновления 2" и снова добавить"ОК!" и т.д.?
cambit,
В случае запуска BAT-файла с командами : …
сие Вы пробовали именно на Win9x?
Возможно ли написать Bat-файл таким образом, чтобы при выполнении установки первого файла в экране консоли появилась надпись "Установка обновления 1", (это я знаю как), а после завершения в этой же строке добавилось "ОК!" »
Под нынешними ОС можно обойтись без сторонних утилит («<nul set /p …»), а вот под Win9x потребуется либо установка ansy.sys, либо сторонняя утилита, которая не добавляет CrLf в конец выводимой строки, например, «EchoX.exe» из комплекта: Bill Stewart's Site - Shell Scripting Toolkit (http://www.westmesatech.com/sst.html).
Тогда можно будет изобразить нечто наподобие:
@echo off
set sKB=KB239887
set sFN=d:\4756ru8.exe
echox.exe -n "Starting update %sKB% [%sFN%]..."
start.exe /wait %sFN% /q /r:n
echox.exe OK
set sKB=KB260067
set sFN=d:\260067rus8.exe
echox.exe -n "Starting update %sKB% [%sFN%]..."
start.exe /wait %sFN% /q /r:n
echox.exe OK
set sKB=KB260067
set sFN=d:\263044rus8.exe
echox.exe -n "Starting update %sKB% [%sFN%]..."
start.exe /wait %sFN% /q /r:n
echox.exe OK
exit
cambit,
Цитата:
В случае запуска BAT-файла с командами : …
сие Вы пробовали именно на Win9x? »
Именно Windows 98SE.
По второму моему вопросу - ладно, обойдемся. Сторонние программы использовать нельзя.
Еще подастаю вопросами, не возражаете?
Как сделать, чтобы после установки всех обновлений из BAT-файла, который мы с Вами только что сделали, выскочило окошко с запросом на перезагрузку? Може что то дописать в ВАТ-ник?
Еще проблема: скачал скрипт vbs для перезагрузки компьютера.
Вот он:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Reboot()
Next
Так вот ХР перезагружается а 98SE выдает ошибку - см. Err.jpg
Версия WSH в ХР - 5.7 а в 98-5.6
cambit, попробуйте вариант проще: How to Exit Windows 98/Me Automatically Using a Batch File (http://support.microsoft.com/kb/234216):
@echo off
rundll32.exe shell32.dll,SHExitWindowsEx 2
Регистр в имени функции имеет значение!
Спасибо, катит.
А как с выводом окошка с подтверждением перезагрузки можно придумать?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.