Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.26;
Скачать: CL | DM;

Вниз

Как узнать что отменили перезагрузка в чужой программе   Найти похожие ветки 

 
Кто б сомневался ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.017 c
9-1180939732
MegaVolt
2007-06-04 10:48
2009.07.26
Проблемы при освоении OpenGL. Подскажите решение.


15-1243154276
Full
2009-05-24 12:37
2009.07.26
Где находяться результаты программы chkdsk?


15-1242993877
feel
2009-05-22 16:04
2009.07.26
Програмирование загрузочного сектора.


4-1213013370
harisma
2008-06-09 16:09
2009.07.26
Дождаться завершения выполнения процесса


15-1242935407
Эстет
2009-05-21 23:50
2009.07.26
Чему равно 2*2,222