c# - 如何制作程序来检测实时保护是否开启?
问题描述
我想检测是否打开了实时保护,例如如果用户启动我的程序,它会告诉你 - 你RealTimeProtection
打开了并且可能会阻止一些事情!我不知道该怎么做。
解决方案
如果您的唯一目标是检测该选项是启用还是禁用,您最好的办法是找到 Windows 保留该设置的注册表项。
经过一些谷歌搜索后,我们会发现它存储在注册表项HKLM\SOFTWARE\Microsoft\Windows Defender\Real-Time Protection
中,DisableRealtimeMonitoring
因此使用该信息解决方案变得微不足道。
以下代码在LinqPad中运行时,将输出该注册表项是否存在并且其值是否设置为 1。
请注意,如果您的进程作为 32 位进程运行,我们需要调用OpenBaseKey
以获取注册表的 64 位配置单元。
剩下的就直接用OpenSubKey
andGetValue
来获取我们需要的信息。
请注意,您没有该密钥的写入权限。你需要先提升才能改变它。
// using Microsoft.Win32;
var path = @"SOFTWARE\Microsoft\Windows Defender\Real-Time Protection";
var key = "DisableRealtimeMonitoring";
var regkey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
if (regkey != null) {
var subkey = regkey.OpenSubKey(path);
var val = subkey.GetValue( key );
if (val != null && val is Int32) {
var value = (int) val;
if (value == 1) {
value.Dump("Protection is off");
} else {
value.Dump("Protection is on");
}
} else {
"probably".Dump("Protection is on");
}
} else {
"huh?".Dump("key is not found");
}
如果您确实发现他们已禁用此实时保护,请立即警告您的用户。你不希望他们遇到麻烦。