Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1243197004
Юрий
2009-05-25 00:30
2009.07.26
С днем рождения ! 25 мая 2009 понедельник


15-1242766394
Германн
2009-05-20 00:53
2009.07.26
А что нынче происходит с Яндексом? Кто шалит?


2-1243837873
Desyatnik
2009-06-01 10:31
2009.07.26
Поиск


11-1204051967
andreil
2008-02-26 21:52
2009.07.26
Как перебрать на форме все контролы?


15-1242922477
Rouse_
2009-05-21 20:14
2009.07.26
Для интересующихся защитой и в особенности ключами Guardant





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский