Вопрос или проблема
У меня есть удаленная машина, работающая на Windows 7, которая выходит из системы, закрывая все запущенные приложения, и затем снова автоматически входит в систему. Это происходит каждый день, но не в определенное время и без конкретной задачи.
После изучения журналов событий, как показано выше на изображении, я нашел несколько событий с идентификаторами 7001 и 7002 с категориями задач 1101 и 1102 соответственно.
Я использую Windows 7. Мы испытываем эту проблему с другими 3 машинами с той же конфигурацией.
Чтобы решить эту проблему, я искал в Интернете и применил решение, касающееся пользовательского опыта, которое упоминается по ссылке ниже:
Уведомление о выходе пользователя для Программы улучшения пользовательского опыта
Может ли кто-нибудь помочь мне разобраться с этой проблемой?? Я на правильном пути для решения этой проблемы?
Обновление: После предложения, сделанного @TwistyImpersonator, я могу сказать следующее из подробного просмотра событий (изображения прикреплены в конце):
В системных событиях:
Следующие события всегда происходили ПОСЛЕ событий ‘Winlog’:
Менеджер управления службами-7036-Нет-Служба обнаружения оборудования Shell вошла в состояние остановки.
И в событии приложения следующие события произошли примерно в то же время:
Предупреждение-09.11.2017 18:19:29-Служба профилей пользователей-1530-Нет-Windows обнаружила, что ваш файл реестра все еще используется другими приложениями или службами. Файл будет выгружен сейчас. Приложения или службы, которые удерживают ваш файл реестра, могут работать неправильно после этого.
ДЕТАЛИ –
1 дескриптор реестра пользователя утек из \Registry\User\S-1-5-21-1277090162-4221482773-868009429-3552: Процесс 272 (\Device\HarddiskVolume2\Windows\System32\svchost.exe) открыл ключ \REGISTRY\USER\S-1-5-21-1277090162-4221482773-868009429-3552\Printers\DevModePerUserИнформация-09.11.2017 18:19:29-Диспетчер окна рабочего стола-9009-Нет-Диспетчер окна рабочего стола завершил работу с кодом (0x40010004)
Прежде чем судить этот ответ, пожалуйста, знайте, что это работа в процессе. Комментарии стали слишком многочисленными и не были действительно посвящены ответу на вопрос, а вместо этого находили причину проблемы.
В данный момент я не могу достать копию win7, чтобы проверить, как работает приведенный ниже код на win7. Я сделаю это на следующей неделе, или просто скажите мне, что вы испытываете…
—- черновик ответа —-
Хотя лучшим решением вашей проблемы является нахождение её причины, я собираюсь ответить на вопрос в заголовке:
“как предотвратить автоматический выход из системы в windows 7”
Чтобы зафиксировать и предотвратить выход из системы, текущий способ, который я обнаружил, заключался в том, чтобы перехватить событие “formclosing” формы Windows в C# и проверить, является ли CloseReason равным CloseReason.WindowsShutDown. Это событие затем может быть “отменено” кодом.
Вот весь код:
using System;
using System.Windows.Forms;
using System.IO;
namespace BlockLogoffForm
{
public partial class PreventLogoff : Form
{
public PreventLogoff()
{
InitializeComponent();
}
private void PreventLogoff_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason.Equals(CloseReason.WindowsShutDown))
{
File.AppendAllText("c:\\temp\\logofflog.txt","log off prevented at " + DateTime.Now);
e.Cancel = true;
}
}
}
}
Скачать скомпилированный бинарный файл здесь:
BlockLogoffForm.exe
С текущим дизайном вы должны запустить эту программу и оставить её работать до тех пор, пока автоматический выход из системы действительно не произойдет. Дальнейшие изменения могут привести к тому, что она будет работать как приложение в системном трее или аналогично.
.
Ответ или решение
Чтобы предотвратить автоматическое завершение сеанса в Windows 7, сначала необходимо определить причину проблемы. Автоматическое завершение сеанса может вызываться различными факторами, такими как системные обновления, программное обеспечение сбоев или настройки политики. Ниже приведены несколько шагов, которые помогут вам диагностировать и устранить причину автоматического завершения сеанса.
Теория
Автоматическое завершение сеанса в Windows 7 может быть вызвано несколькими факторами, в том числе политиками групп, некорректно настроенными системными службами, проблемами с драйверами или программами, а также вредоносным ПО. Важнейший шаг в решении проблемы — анализ событий в журнале Windows, чтобы определить, какие именно процессы или службы приводят к завершению сеанса пользователя.
События с ID 7001 и 7002, упомянутые в вопросе, относятся к службе управления контролем службы (Service Control Manager) и могут указывать на проблемы с зависимыми службами, которые могут не запускаться должным образом. Событие с ID 1530 может свидетельствовать о том, что пользовательские регистры остаются загруженными даже после завершения работы приложений, что может объяснять вашу проблему с завершением сеанса.
Пример
Возьмем пример анализа журнала Windows:
-
Служба управления контролем (SCM): События 7001 и 7002 обычно связаны с остановкой или некорректным запуском зависимых служб. Это может привести к прекращению работы критически важных элементов, что в свою очередь инициирует завершение сеанса.
-
Проблемы с пользовательским профилем: Событие 1530 сообщает о проблемах с выгрузкой пользовательских регистров. Это может указывать на то, что некоторые приложения или службы не завершают работу корректно.
-
Диспетчер окон рабочего стола (DWM): Этот компонент отвечает за управление всеми окнами, и если он выгружен неожиданно, это может привести к завершению сеанса пользователя.
Применение
Чтобы решить проблему с автоматическим завершением сеанса в Windows 7, вам следует предпринять несколько диагностических и корректирующих шагов:
-
Анализ журналов событий:
- Запустите "Просмотр событий" и проверьте журналы системных и приложений на наличие предупреждений или ошибок, происходящих до и во время автоматического завершения сеанса.
-
Проверка работы служб:
- Проверьте работающие службы в "Диспетчере задач" или с помощью команды
services.msc
. Убедитесь, что все критически важные системные службы, такие как "Shell Hardware Detection", работают корректно и имеют статус автоматического запуска.
- Проверьте работающие службы в "Диспетчере задач" или с помощью команды
-
Проверка политик групп:
- Политики групп могут автоматически завершать сеансы пользователей по заданному времени или в случае неактивности. Используйте редактор политик групп — gpedit.msc, чтобы проверить любые пользовательские политики, которые могут вызывать завершение сеанса.
-
Проверка на вирусы и вредоносное ПО:
- Выполните полное сканирование системы на вирусы и вредоносные программы с использованием актуального антивирусного ПО.
-
Поиск и устранение проблем с профилем:
- Если событие 1530 повторяется, убедитесь, что все приложения и службы корректно завершают работу и освобождают пользовательские ресурсы. Пересоздайте профиль пользователя, если это необходимо, чтобы устранить повреждения.
-
Использование сторонних инструментов:
- Как временное средство, вы можете использовать приложение, подобное предложенному в исходном вопросе (BlockLogoffForm), которое предотвращает завершение сеанса. Однако это не является долгосрочным решением и может вызвать другие проблемы с безопасностью или стабильностью системы.
-
Обновление системы:
- Убедитесь, что все системные обновления установлены. Иногда проблема может быть решена при помощи патча или обновления от Microsoft, которое устраняет известные уязвимости или неисправности.
Заключение
Идентификация и устранение причин автоматического завершения сеанса в Windows 7 требует внимательного изучения журналов событий и настроек системы. Применение вышеуказанных шагов должно помочь вам стабилизировать работу вашей системы и предотвратить непреднамеренные завершения сеанса. Помните, что работа с системными настройками и реестром требует осторожности, и рекомендуется всегда делать резервные копии важных данных перед внесением изменений.