2010-01-15 3 views
3

У меня есть приложение, которое, когда я закрываю Windows, выходит изящно и быстро (проверено также в диспетчере задач и Process Explorer - процесс больше не существует), но ОС нет. Кажется, что ОС просто игнорирует Shutdown.ОС не завершает работу, но мое приложение делает

Но если я попытаюсь снова закрыть Windows, теперь все в порядке. Система выключается очень обычным способом.

  1. Почему?
  2. Как я могу это исправить?

Подробная информация о моем приложении:

  • многопоточном
  • имеет иконку в трее
  • не делать какой-либо специальной обработки WM_QUERYENDSESSION (или аналогичный) сообщения OS
  • Безразлично» t есть специальный водитель, крючок DLL и т. д.

Любые идеи, как это исправить?

PS: Я в вашем распоряжении с и более подробной информации по запросу

ответ

1

ли вы на самом деле возвращают TRUE, в WM_QUERYENDSESSION (или аналогичных) сообщений ОС? Вы можете получить сообщение, закрыть приложение и вернуть FALSE.

+0

Нет, я не обрабатываю эти сообщения.IOW, я не подключаю их, и поэтому очередь сообщений по умолчанию возвращает «Истина». –

+0

Ах. Я думал, что «не делает никакой специальной обработки», вы имели в виду не делать странных вещей в обработчике, а просто закрывать приложение. – GSerg

+0

@plainth: Я думаю, вы должны проследить это. Может быть, очередь сообщений по умолчанию не возвращает «истина» для всех обработчиков (по какой-либо причине, следовательно, необходимость в трассировке), но по-прежнему вызывает достаточно простое завершение procs, чтобы фактически закрыть приложение. –

0

Если приложение все еще работает на фоне, это может привести к остановке Windows.

Вы можете проверить, если параметры AutoEndTasks включены и включена, если нет:

http://technet.microsoft.com/en-us/library/cc978604.aspx

С наилучшими пожеланиями

+0

Нет, дескриптор процесса приложения исчезает из списка процессов. Кроме того, он не взаимодействует с каким-либо системным сервисом. OTOH, я не могу полагаться на AutoEndTasks (или на любые другие внешние настройки), потому что я не контролирую компьютер (ы), на котором будет развернуто приложение. –

+0

Дорогой, да, я думаю, что этот параметр по умолчанию был 1, но нет, это моя ошибка, тогда я думаю, что это один из ваших блоков потока. Если это консольное приложение, вы можете использовать SetConsoleCtrlHandler с CTRL_SHUTDOWN_EVEN, чтобы исправить его. http://msdn.microsoft.com/en-us/library/ms686016%28VS.85%29.aspx С наилучшими пожеланиями – madshiva

1

Удивительно, но почти точно такая же проблема прослушивают нас на этой неделе.

Приложение запустилось в лоток, закрыт, но не удалось закрыть окна. Так что, присутствуя там, я поделюсь тем, что исправило проблему для нас.

  • Исправлена ​​ошибка, связанная с удалением данных.
  • Устранение проблемы с компонентом NMsmtp.
  • Реализация данного предложения в this bug report устраняет проблему на моей рабочей станции, но не на другом.

В конце концов, мы решили просто удалить компонент NMsmtp, для которого у нас не было исходного кода и он изменился на использование Indy.

Скорее всего, ваша ситуация будет отличаться, поэтому я предлагаю вам сделать то, что мы сделали, и начать снимать с вас все, пока это не сработает.

Смежные вопросы