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

cambit 16-02-2010 18:46 1348765

Помогите начинающему: как автоматически отменить перезагрузку компа
 
Уважаемые Мастера! Подскажите:
Есть программа которая по окончании запрашивает перезагрузку компьютера.
Вот скриншот.
Какой можно написать ВАТ-файл или скрипт, чтобы он автоматически ответил "НЕТ"?
Система - Windows 98SE.
Просьба сильно не пинать, если это просто. Пол дня сижу в нете и ничего похожего не нашел.
Может не там смотрел?

Iska 16-02-2010 19:23 1348799

cambit, я бы попробовал такое: Параметры командной строки, которые поддерживаются обновлениями, разработанными с помощью технологии Iexpress.
Код:

<имя файла обновления>.exe /q /r:n
Во всяком случае, на нашедшемся у меня обновлении KB239887 сие работает.

cambit 16-02-2010 21:11 1348871

Спасибо! оно!!!
Но у меня есть еще один вопрос.
Таких файлов обновлений всего 21. Хочу одним ВАТ-файлом запустить их все по очереди (один установился - запускается следующий и т.д. ) Ткните носом где почитать!

Iska 16-02-2010 23:00 1348947

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

start /wait <имя файла обновления1>.exe /q /r:n
start /wait <имя файла обновления2>.exe /q /r:n

start /wait <имя файла обновленияN>.exe /q /r:n

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

gora 17-02-2010 09:13 1349150

Iska, всегда считал, что команда:
Код:

start /wait install.exe
эквивалентна команде:
Код:

install.exe
и не дает ни каких преимуществ. Или я ошибаюсь!?
Цитата:

Цитата cambit
Таких файлов обновлений всего 21. Хочу одним ВАТ-файлом запустить их все по очереди (один установился - запускается следующий и т.д. ) »

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

cambit 17-02-2010 12:07 1349278

Спасибо!! Очень интересно, вникаю.
Но аппетит приходит во время еды. Теперь закралась мысль все это сделать с помощью скриптов.
Да еще что бы выскакивало сообщение типа "Устанавливается обновление 1 из 21" затем после выполнения его установки оно автоматически закрывалось, появлялось следующее "Устанавливается обновление 2 из 21" и т.д. а в конце типа "Все ОК, Перезагрузить компьютер? "
Где можно прочитать оспособах вывода сообщения на екран?

gora 17-02-2010 12:52 1349318

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 и скрипт положите рядом с файлами обновлений.

PPS
Нужна будет русская справка по nircmd, стучите в ПМ, поделюсь.

cambit 17-02-2010 16:10 1349467

Не проходит именно по вот этой причине:
Цитата:

Цитата gora
Если запускаемое приложение не запускает дочерний процесс и при этом не закрывают основной, то второе приложение запустится только по завершению первого, но если приложение закроет свой основной процесс и продолжит выполнять дочерний, то второе приложение запустится не дожидаясь окончания установки первого. Все будет зависеть от ваших приложений и их особенностей. »

А там два процесса - сначала распаковка архива а потом собственно обновление.

gora 17-02-2010 16:24 1349482

Цитата:

Цитата cambit
там два процесса - сначала распаковка архива а потом собственно обновление »

Тогда есть два варианта:
1 Знать имя второго процесса и, если оно постоянное у всех обновлений, то организовывать цикл и ждать завершения этого процесса. Это и будет сигналом о завершении установки данного обновления, а после него переходить к следующему.
2 Оставить включенными окна с предложением перезагрузки и, если оно есть у всех обновлений и заголовок у него постоянный, то ждать в цикле появления этого окна, посылать с помощью nircmd в окно команду "No", и переходить к следующему обновлению.

cambit 17-02-2010 18:36 1349615

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

Iska 17-02-2010 20:26 1349702

Цитата:

Цитата gora
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, конечно, хорош, но он рассчитан на cmd.exe, которого в Win9x, понятное дело, нет. Так что, на мой взгляд, «/q /r:n» вполне хватает (ну, конечно, кого-то может просто раздражать само окно консоли, понимаю).

gora, ещё вопрос, возможно, Вы в курсе: я, интереса ради, попробовал запустить qchain.exe от W2K (KB815062) под Win9x для целей, описанных в KB296861 (с другой стороны, даже не знаю, было ли такое непосредственно под Win9x, и, вообще, актуально ли там такое). Запускаться — запускается, а, вот, проверить, корректно ли отрабатывает — опять же не могу, вследствие слишком малой базы обновлений, в которых нет пересекающихся файлов. Вы не пробовали такое?

gora 17-02-2010 21:04 1349737

Iska, я уже давно ушел с Win9x и вряд ли смогу ответить на ваши вопросы, даже про cmd.exe не подумал... :(

Iska 17-02-2010 21:20 1349751

gora, спасибо, ясно. Для меня эти вопросы тоже больше риторические; держу так, на всякий случай, развёрнутую систему под виртуальной машиной.

cambit 17-02-2010 21:34 1349762

Попробовал, выкладываю.
В случае запуска BAT-файла с командами :
Upd1.exe
Upd2.exe
Upd3.exe и т.д.
Выполняются все сразу,
а через start /wait - ждет окончания.
Как проверил? Убрал ключ /r:n и в первом случае почти сразу вывалилось несколько предложений о перезагрузке, а во втором - сначала одно, нажимаю "НЕТ", потом другоеи т.д.
Так что Iska прав.
Что касается очередности запуска - я думаю поступлю таким образом - я записал последовательность установки с Windows Update, в таком порядке и буду запускать.

cambit 17-02-2010 21:56 1349785

Мастера! Подскажите, возможно ли написать Bat-файл таким образом, чтобы при выполнении установки первого файла в экране консоли появилась надпись "Установка обновления 1", (это я знаю как), а после завершения в этой же строке добавилось "ОК!", потом с новой строки "Установка обновления 2" и снова добавить"ОК!" и т.д.?

Iska 17-02-2010 23:27 1349875

cambit,
Цитата:

В случае запуска BAT-файла с командами : …
сие Вы пробовали именно на Win9x?

Цитата:

Цитата cambit
Возможно ли написать Bat-файл таким образом, чтобы при выполнении установки первого файла в экране консоли появилась надпись "Установка обновления 1", (это я знаю как), а после завершения в этой же строке добавилось "ОК!" »

Под нынешними ОС можно обойтись без сторонних утилит («<nul set /p …»), а вот под Win9x потребуется либо установка ansy.sys, либо сторонняя утилита, которая не добавляет CrLf в конец выводимой строки, например, «EchoX.exe» из комплекта: Bill Stewart's Site - Shell Scripting Toolkit.

Тогда можно будет изобразить нечто наподобие:
читать дальше »
Код:

@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 17-02-2010 23:38 1349887

Цитата:

Цитата Iska
cambit,
Цитата:
В случае запуска BAT-файла с командами : …
сие Вы пробовали именно на Win9x? »

Именно Windows 98SE.

По второму моему вопросу - ладно, обойдемся. Сторонние программы использовать нельзя.
Еще подастаю вопросами, не возражаете?
Как сделать, чтобы после установки всех обновлений из BAT-файла, который мы с Вами только что сделали, выскочило окошко с запросом на перезагрузку? Може что то дописать в ВАТ-ник?

cambit 18-02-2010 00:09 1349914

Еще проблема: скачал скрипт 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

Iska 18-02-2010 02:36 1349994

cambit, попробуйте вариант проще: How to Exit Windows 98/Me Automatically Using a Batch File:
Код:

@echo off
rundll32.exe shell32.dll,SHExitWindowsEx 2

Регистр в имени функции имеет значение!

cambit 18-02-2010 10:00 1350126

Спасибо, катит.
А как с выводом окошка с подтверждением перезагрузки можно придумать?

cambit 18-02-2010 12:47 1350232

Чего то я намудрил с вопросом об окне, раз никто не отвечает.
Подскажите тогда как в том же ВАТ-нике прописать запрос на перегрузку?
Я так думаю, надо создать переменную, в которую будут заносится значения "у" или "n" с клавиатуры и взависимости от этого значения будет запускаться или нет следующий ВАТ-файл с вышеуказанными строками:
Цитата:

Цитата Iska
Код:
@echo off
rundll32.exe shell32.dll,SHExitWindowsEx 2 »


gora 18-02-2010 13:26 1350256

Цитата:

Цитата cambit
Чего то я намудрил с вопросом об окне, раз никто не отвечает. »

Доп. утилиты Вам не подходят. Командного интерпретатора в win9x я уже не помню. Посмотрите наличие ключа в команде SET /P и его описание, может Вас устроит.

cambit 18-02-2010 21:39 1350620

Всем СПАСИБО за помощь!
Проблему решил комбинировано с помощью Js-скрипта и 2-х ВАТ-файлов.
Скрипт прилагаю:
Код:
//Программа установки обновлений WINDOWS98
var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var Message = "Запустить программу установки обновлений Windows 98SE?";
var Title = "Подтвердите действие";
var WSHShell = WScript.CreateObject("WScript.Shell");
Welcome();

WSHShell.Run("Update.bat",5,"True");

function Welcome() {
var intDoIt;

intDoIt = WSHShell.Popup(Message,
0,
Title,
vbOKCancel + vbInformation);
if (intDoIt == vbCancel) {
WScript.Quit();
}
}
//Запрос на перезагрузку
var vbOK = 1;
var Inf = 64;
var Cancel = 2;
var Messag = "Установка завершена. Компьютер следует перезагрузить. Выполнить?";
var Titl = "Подтвердите действие";
var WSHShell = WScript.CreateObject("WScript.Shell");
Welcom();

WSHShell.Run("Shutdown.bat",5,"False");

function Welcom() {
var intDo;

intDo = WSHShell.Popup(Messag,
0,
Titl,
vbOK + Inf);
if (intDo == Cancel) {
WScript.Quit();
}
}


Время: 06:41.

Время: 06:41.
© OSzone.net 2001-