Форум: "Прочее";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];
ВнизКак узнать что отменили перезагрузка в чужой программе Найти похожие ветки
← →
Кто б сомневался © (2009-05-19 22:21) [0]итак моя программа делает рестарт, приоритет закрытия при рестарте у нее последний, чужая программа, например блокнот, спрашивает юзера - сохранить данные? На что юзер говорит отмена, соотвественно рестарт отменяется. Есть ли механизмы для того чтобы узнать отменился ли рестарта?
Покая идея ждать только по time out.
← →
Кто б сомневался © (2009-05-19 22:22) [1]рестарт Windows
← →
Кто б сомневался © (2009-05-19 22:53) [2]сорри за ошибки, спешил малеха..
← →
DVM © (2009-05-19 22:54) [3]
> Есть ли механизмы для того чтобы узнать отменился ли рестарта?
>
Ну ждем какое то время, скажем минуту, если мы еще живы и ждем, то вероятно рестарт отменился.
> итак моя программа делает рестарт, приоритет закрытия при
> рестарте у нее последний
А как это сделано?
← →
Игорь Шевченко © (2009-05-19 22:58) [4]
> Есть ли механизмы для того чтобы узнать отменился ли рестарта?
>
пришло сообщение WM_ENDSESSION или нет
← →
Кто б сомневался © (2009-05-19 22:59) [5]SetProcessShutdownParameters
← →
Кто б сомневался © (2009-05-19 23:01) [6]
> DVM © (19.05.09 22:54) [3]
> Игорь Шевченко © (19.05.09 22:58) [4]
Ваш вариант - только по time out.
дело в том что форма показывает текст - мол Restarting Windows и висит пока не закроется из-за рестарта (от WM_ENDSESSION). Если юзер отменяет то соответсвенно мы будет висеть еще пол-минуты.
вот в чем проблема...
← →
Кто б сомневался © (2009-05-19 23:02) [7][5] - это ответ на
> > итак моя программа делает рестарт, приоритет закрытия
> при
> > рестарте у нее последний
>
> А как это сделано?
← →
DVM © (2009-05-19 23:09) [8]
> Кто б сомневался © (19.05.09 23:01) [6]
Пожалуй, что никак сразу и не узнать что рестарт отменился.
← →
Игорь Шевченко © (2009-05-19 23:18) [9]
> дело в том что форма показывает текст - мол Restarting Windows
> и висит пока не закроется из-за рестарта (от WM_ENDSESSION).
> Если юзер отменяет то соответсвенно мы будет висеть еще
> пол-минуты.
> вот в чем проблема...
А почему не сделать по принципу наименьшего удивления ? Выводится диалог, что для продолжения <IYFAH> требуется перезагрузка, хотите сейчат - да, хотите позже - нет. И если да, то без всяких форм restarting windows честно вызывать перезагрузку и завершать работу. А если блокнот ее отменил - пользователь все равно предупрежден о необходимости перезагрузки.
← →
Кто б сомневался © (2009-05-19 23:29) [10]
> И если да, то без всяких форм restarting windows честно
> вызывать перезагрузку и завершать работу. А если блокнот
> ее отменил - пользователь все равно предупрежден о необходимости
> перезагрузки.
Такой режим есть, но это другой - спец. режим, - silent mode, программа не задает никаких вопросов, и не видимая. А форма эта нужна, для того, чтобы юзер видел что программа запустилась (т.е. показывает короткий текст типа - "Делаем 1,2,3" и после "Restatring Windows"), дабы он не кликал по ярлыку по несколько раз.
Т.е. здесь не прокатит. А в обычном режиме есть кнопка перезагрузка, программа пускает рестарт и сразу закрывается и далее все на усмотрение юзера.
← →
DVM © (2009-05-19 23:34) [11]
> но это другой - спец. режим, - silent mode
Так может юзера игнорировать или написать ему, что мол, если через 15 сек все не будет закрыто, извиняйте, все будет прибито насильно. Вин, кстати, так делает иногда, в случае сбоя RPC кажется.
← →
Игорь Шевченко © (2009-05-19 23:35) [12]
> (т.е. показывает короткий текст типа - "Делаем 1,2,3" и
> после "Restatring Windows"),
А если он не хочет ?
Я к чему - не надо ждать, надо вызывать ExitWindowsEx и завершаться
← →
Игорь Шевченко © (2009-05-19 23:37) [13]Кстате, есть хорошее правило - запрос на перезагрузку всегда должен подтверждаться пользователем
← →
Кто б сомневался © (2009-05-19 23:46) [14]
> Кстате, есть хорошее правило - запрос на перезагрузку всегда
> должен подтверждаться пользователем
Юзер знает что в silent режиме перезагрузка пойдет без спроса. Для этого он его и выбрал. Он кликает по ярлыку, и далее все идет автоматом включая перезапуск.
← →
DVM © (2009-05-19 23:48) [15]
> Кто б сомневался © (19.05.09 23:46) [14]
> Юзер знает что в silent режиме перезагрузка пойдет без спроса.
>
Тогда, как я написал, предупреждение, время на сборы и кто не успел - тот опоздал.
← →
Игорь Шевченко © (2009-05-19 23:59) [16]
> Юзер знает что в silent режиме перезагрузка пойдет без спроса.
> Для этого он его и выбрал. Он кликает по ярлыку, и далее
> все идет автоматом включая перезапуск.
Ради Аллаха, нехай все остальное делается silent, но вот насчет перезагрузки - все-таки лучше подтвердить. Как собственно делают все инсталляторы, обновляторы и прочая мерзость.
К тому же, как вяжется "юзер сам выбрал silent" и в то же время "блокнот может отменить перезагрузку" ?
← →
Игорь Шевченко © (2009-05-20 00:02) [17]кстати, еще один момент - если ждать WM_ENDSESSION и повесить разумный time-out, то даже твоя задача может быть решена, потому как недождавшись по тайм-ауту ты поймешь, что перезагрузка отменена, а получив во время ожидания WM_ENDSESSION ты перестаешь ждать и делаешь то, что хотел, узнав, что перезагрузку не отменили.
← →
Игорь Шевченко © (2009-05-20 00:03) [18]Но это все равно нестандартное поведение :)
← →
DVM © (2009-05-20 00:04) [19]Мне вообще непонятно, зачем ждать? Чтоб второй раз перезагрузку инициировать?
← →
Кто б сомневался © (2009-05-20 00:16) [20]Да, думаю это оптимальный вариант. Я тоже так думал, по 20 сек (по дефолту) на закрытие, и после форсированное терминирование -
If this time expires before all applications have stopped, the system displays a user interface that allows the user to forcibly shut down the system. If the EWX_FORCE value is specified, the system forces running applications to stop when the time expires.
За это время там можно и в сапера сыграть.
На всякий случай наверное надо повесить timeout на отмену минуты на 2 с половиной - сейчас антивирусы мудрят с системой на низком уровне, и EWX_FORCE может не получиться.
← →
DVM © (2009-05-20 00:22) [21]
> EWX_FORCE может не получиться.
Пройтись по списку процессов TerminateProcess() :)
← →
Кто б сомневался © (2009-05-20 00:31) [22]
> Пройтись по списку процессов TerminateProcess() :)
Дык это ж антивирусы, они от этого защищены подавно..
Кстати, я нашел функцию, в которой можно указать колбэк функцию со статусом программы (на список программ точнее), которая не хочет закрываться. ERROR_FAIL_SHUTDOWN - итп.
RmShutdown RmRestart
Но она только для Свисты.. И инсталяторов. Хотя не пойму, ведь любая программа может прикинуться инсталлятором. Или там в висте как то это по особому сделано? Только для msi скриптов? Кто нибудь может что то сказать по этому поводу?
← →
Германн © (2009-05-20 01:00) [23]
> Кто б сомневался © (19.05.09 22:21)
>
> итак моя программа делает рестарт, приоритет закрытия при
> рестарте у нее последний, чужая программа, например блокнот,
> спрашивает юзера - сохранить данные? На что юзер говорит
> отмена, соотвественно рестарт отменяется. Есть ли механизмы
> для того чтобы узнать отменился ли рестарта?
"Итак". Рестарт Windows, штатно, имеет право выполнять только инсталлятор. А он "обязан" предупреждать о том, "чтобы все прочие программы были закрыты" до начала его выполнения!
← →
korneley © (2009-05-20 09:29) [24]
> DVM © (20.05.09 00:22) [21]
Я как-то обычнымInitiateSystemShutdown()
сbForceAppsClosed = true
справлялся :) Ни один Касперский, Нод, Веб, и .т.д. не пискнул.
← →
Кто б сомневался © (2009-05-20 10:14) [25]
> Рестарт Windows, штатно, имеет право выполнять только инсталлятор.
здрасьте, кто это там такое сказал? Где написано?
Мало ли из-за чего может понадобится рестарт.
← →
brother © (2009-05-20 10:19) [26]я согласен с [23], хоть и сайлент режим, но предупредить, и дать возможность отмены перезагрузки нужно! Пусть таймер тикает и если не нажали отмена - перезагрузка
← →
Игорь Шевченко © (2009-05-20 10:48) [27]
> Мало ли из-за чего может понадобится рестарт.
И из-за чего же ?
← →
DVM © (2009-05-20 10:49) [28]
> Игорь Шевченко © (20.05.09 10:48) [27]
> И из-за чего же ?
Удаленное администрирование сервера, например.
← →
KSergey © (2009-05-20 10:55) [29]> DVM © (20.05.09 10:49) [28]
> Удаленное администрирование сервера, например.
Администрирование и перезагрузка - как связаны?
← →
DVM © (2009-05-20 11:00) [30]
> KSergey © (20.05.09 10:55) [29]
Что никогда не возникало необходимости перезагрузить удаленный сервер?
Несложно представить себе утилиту удаленного администрирования, которая бы перезагружала сервер без лишних телодвижений.
← →
Игорь Шевченко © (2009-05-20 11:04) [31]
> Что никогда не возникало необходимости перезагрузить удаленный
> сервер?
Возникало. Вручную.
> Несложно представить себе утилиту удаленного администрирования,
> которая бы перезагружала сервер без лишних телодвижений.
>
Сложно
← →
Плохиш © (2009-05-20 11:09) [32]
> DVM © (20.05.09 10:49) [28]
>
>
> > Игорь Шевченко © (20.05.09 10:48) [27]
>
>
> > И из-за чего же ?
>
> Удаленное администрирование сервера, например.
Блокнот на удалённом сервере?
В конторе "рога и копыта" можно производить перезагрузки сервера без предупреждений обычным выдёргиванием кабеля питания...
← →
DVM © (2009-05-20 11:09) [33]
> Игорь Шевченко © (20.05.09 11:04) [31]
> Сложно
Если с фантазией туго - поглядите на Remote Administartor хотя бы.
← →
DVM © (2009-05-20 11:10) [34]
> Плохиш © (20.05.09 11:09) [32]
> Блокнот на удалённом сервере?
Да хоть WORD. Про терминальный доступ никогда не слышали?
← →
korneley © (2009-05-20 11:12) [35]
> DVM © (20.05.09 11:00) [30]
> Несложно представить
> себе утилиту удаленного администрирования, которая бы перезагружала
> сервер без лишних телодвижений.
Да хоть и клиентов :). У меня как раз такой случай был в [24]. Сеть компов под 90-то, на них крутится некое спецефичное ПО, ну, скажем, что-то типа распределённых вычислений. Т.к. эта система постоянно модифицировалась, стало быть "вглюч" - регулярно. И вот, чтобы Главный Оператор не носился по помещениям с целью "кнопочку нажать" удалённый рестарт/выкл. экономил и время и обувь :)))
← →
DVM © (2009-05-20 11:15) [36]
> korneley © (20.05.09 11:12) [35]
Ну вот и я о том же. Еще хороший пример - интерент кафе и компьютерные клубы разные - клиент уходит бросив открытыми любые программы и т.д. А машин сотня. Удаленно перезагружаем все ненужные после клиента. Или выключаем.
← →
Плохиш © (2009-05-20 11:19) [37]
> DVM © (20.05.09 11:10) [34]
>
>
> > Плохиш © (20.05.09 11:09) [32]
>
>
> > Блокнот на удалённом сервере?
>
> Да хоть WORD. Про терминальный доступ никогда не слышали?
>
>
Странно, на предыдущей работе админ рассылал сообщение о перезагрузке сервера, после чего перезапускал его и ни одна зараза под терминальным доступом эту перезагрузку отменить не могла.
← →
DVM © (2009-05-20 11:23) [38]
> Плохиш ©
> Странно, на предыдущей работе админ рассылал сообщение о
> перезагрузке сервера, после чего перезапускал его и ни одна
> зараза под терминальным доступом эту перезагрузку отменить
> не могла.
Да, так обычно и делают. Но не это ли подтверждение того, что перезагрузка может выполняться и НЕ ИНСТАЛЛЯТОРОМ, как тут категорично заявляли выше.
Админ, наверное, тоже не усилием мысли перезагрузку производил, а каким то ПО, пусть и штатным, но никак не инсталлятором же :). А кому то штатное ПО не нравится и люди изобретают свои примочки.
← →
korneley © (2009-05-20 11:25) [39]
> Плохиш © (20.05.09 11:19) [37]
> ... ни одна зараза под терминальным доступом эту перезагрузку отменить
> не могла.
Админ сказал - админ сделал. Всех. :)
← →
Игорь Шевченко © (2009-05-20 11:29) [40]
> Если с фантазией туго
Туго. А что делать. Через терминальный доступ я удаленный компьютер перезагружал вручную, а не "автоматической софтиной". Разницу видишь ?
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.012 c