Способы проверить состояние восстановления системы в C#

Я работаю, чтобы проверить проверку состояния восстановления системы (включено / отключено). После НИОКР я узнал, что это можно сделать следующими способами:

  1. проверка состояния на srclient.dll
  2. редактирование Registery Keys
  3. WMI доступен до версии XP.

1) Мне нужна помощь о том, как проверить значение ключа реестра из реестра SystemRestore в C#.

2) Мой программный код работает нормально, если мне нужно установить или удалить точку восстановления с помощью доступных функций в библиотеках C#, но я хочу проверить состояние, прежде чем пользователь установит или удалит точку восстановления. Буду признателен, если кто-нибудь поможет найти решение этой проблемы.

2 ответа

Вот как я проверяю, разрешено ли восстановление системы:

RegistryKey rk = Registry.LocalMachine;
RegistryKey rk1 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore");
string sysRestore = rk1.GetValue("RPSessionInterval").ToString();
if (sysRestore.Contains("1"))
{
    MessageBox.Show("System Restore is Enabled");
}

if (sysRestore.Contains("0"))
{
    MessageBox.Show("System Restore is Disabled");
}

Чтобы включить восстановление системы с помощью WMI:

string osDrive = Path.GetPathRoot(Environment.SystemDirectory);

ManagementScope scope = new ManagementScope("\\\\localhost\\root\\default");
ManagementPath path = new ManagementPath("SystemRestore");
ObjectGetOptions options = new ObjectGetOptions();
ManagementClass process = new ManagementClass(scope, path, options);
ManagementBaseObject inParams = process.GetMethodParameters("Enable");
inParams["WaitTillEnabled"] = true;
inParams["Drive"] = osDrive;
ManagementBaseObject outParams = process.InvokeMethod("Enable", inParams, null);

Вот что я использую для VB.NET, который представляет собой путаницу (переведенного) кода Paxamime и некоторого другого кода, который учитывает, на какой ОС (битности) он работает, так что он может получить правильный ключ реестра без ошибок:

Сначала проверяем код ОС:

    Private Function JSE_ReadRegistry() As RegistryKey

        ' Read the SubKey names from the registry
        Dim rkKey As RegistryKey = Nothing

        If Environment.Is64BitOperatingSystem Then
            rkKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
        Else
            rkKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
        End If

        rkKey.Close()

        Return rkKey

    End Function

Затем проверка состояния защиты системы (или восстановление системы):

   Public Function JSE_IsSystemRestoreEnabled() As Boolean

        Dim rk As RegistryKey = JSE_ReadRegistry()
        Dim rk1 As RegistryKey = rk.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore")
        Dim strRestore As String = rk1.GetValue("RPSessionInterval").ToString()

        If strRestore.Contains("1") Then

            Debug.Print("System Restore is Enabled")
            Return True

        ElseIf strRestore.Contains("0") Then

            Debug.Print("System Restore is Disabled")
            Return False

        Else

            Debug.Print("IsSystemRestoreEnabled(): No Idea, JACK!")
            Return False

        End If

    End Function

Тогда вы можете просто сделать что-то вроде:

If JSE_IsSystemRestoreEnabled = True Then
  ' Do something
End If
Другие вопросы по тегам