在C#中检查系统还原状态的方法

时间:2011-10-10 02:01:09

标签: c#

我正在检查系统还原状态检查(启用/禁用)。 在R& D之后我发现它可以通过以下方式完成:

  1. srclient.dll的状态检查
  2. 编辑Registery Keys
  3. WMI-可用到XP版..
  4. 1)我需要有关如何在C#中检查SystemRestore Registry中的注册表键值的帮助。

    2)如果我需要使用C#库中的可用功能设置或删除还原点,我的程序代码可以正常工作,但我想在用户设置或删除还原点之前检查状态。 如果有人帮忙找出解决方案,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

这是我检查是否启用了系统还原的方法:

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);

答案 1 :(得分:0)

这是我用于VB.NET的内容,它是Paxamime(翻译)代码以及一些其他代码的混合物,这些代码考虑了正在运行的OS(位数),因此可以获取正确的注册表项,而不会出现错误:

首先,操作系统检查代码:

    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