По сути, это вопрос 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 .
Обратите внимание, чтото, что Стив и Рэнд Рэндом упоминали в комментариях, правильно.В безопасном режиме ваше приложение не будет запускаться автоматически - и вы не должны этого хотеть.Это обнаружение необходимо выполнить вручную при запуске приложения, и только если вы действительно будете вести себя по-другому.
Не думайте, что пользователь, загружающийся в безопасном режиме, подразумевает, что он хочет войтирежим восстановления в вашей программе.Системные проблемы и проблемы приложений полностью независимы.Вы должны просто предоставить способ входа в режим восстановления как часть вашего приложения - возможно, переключатель командной строки.Не используйте глобальное решение для локальной проблемы.