Проверьте, находится ли компьютер в безопасном режиме C # - PullRequest
0 голосов
/ 11 апреля 2019

Я написал программу, которая запускается автоматически.Это влияет на то, как используется компьютер, и поэтому, если есть проблема с настройками программы, компьютер может оказаться непригодным для использования.

Я бы хотел, чтобы программа обнаружила, когда компьютер загружается в безопасном режиме, чтобы открыть программу.меню восстановления.Я нашел это решение, но оно похоже только на C ++.

Я пишу приложение WPF в .NET Framework и хочу проверить состояние безопасного режима для компьютера с Windows 10.

Редактировать: Я предполагаю, что программа будет запускаться вручную в безопасном режиме, она обнаруживает, что она находится в безопасном режиме, поэтому вместо обычной программы открывается меню восстановления.

1 Ответ

1 голос
/ 13 апреля 2019

По сути, это вопрос Windows API, поэтому решение одинаково для всех языков: вызовите функцию API GetSystemMetrics, запрашивая метрику SM_CLEANBOOT.Это вернет целочисленное значение, указывающее, как загружалась система.В частности:

  • 0 означает нормальную загрузку,
  • 1 означает отказоустойчивую («безопасный режим») загрузку,
  • 2 означает отказоустойчивую загрузкузагрузка с поддержкой сети.

Единственная проблема заключается в том, как вызвать эту функцию из управляемого кода..NET Framework и язык C # позволяют вам выполнять P / Invoke собственные функции.Для этого вам нужно предоставить объявление нативной функции, которую вы хотите вызвать, и вы также захотите определить некоторые типы (перечисления и т. Д.).Пример кода:

internal const int SM_CLEANBOOT = 67;

[DllImport("user32.dll")]
internal static extern int GetSystemMetrics(int smIndex);

Более полный пример кода, включая полный перечислимый тип для всех системных показателей, доступен на pinvoke.net .

Обратите внимание, чтото, что Стив и Рэнд Рэндом упоминали в комментариях, правильно.В безопасном режиме ваше приложение не будет запускаться автоматически - и вы не должны этого хотеть.Это обнаружение необходимо выполнить вручную при запуске приложения, и только если вы действительно будете вести себя по-другому.

Не думайте, что пользователь, загружающийся в безопасном режиме, подразумевает, что он хочет войтирежим восстановления в вашей программе.Системные проблемы и проблемы приложений полностью независимы.Вы должны просто предоставить способ входа в режим восстановления как часть вашего приложения - возможно, переключатель командной строки.Не используйте глобальное решение для локальной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...