3 回答

TA貢獻2051條經驗 獲得超10個贊
根據Microsoft的說法,Windows安全中心使用兩層方法來檢測狀態。一層是手動的,另一層是通過Windows Management Instrumentation(WMI)自動實現的。在手動檢測模式下,Windows安全中心將搜索獨立軟件制造商提供給Microsoft的注冊表項和文件。這些注冊表項和文件使Windows安全中心可以檢測獨立軟件的狀態。在WMI模式下,軟件制造商確定自己的產品狀態,然后通過WMI提供程序將該狀態報告給Windows安全中心。在兩種模式下,Windows安全中心都會嘗試確定以下各項是否成立:
存在防病毒程序。
防病毒簽名是最新的。
防病毒程序的實時掃描或讀寫掃描已打開。
對于防火墻,Windows安全中心會檢測是否安裝了第三方防火墻以及是否打開了防火墻。
因此,為了確定是否存在防病毒軟件,可以使用WMI與root\SecurityCenter名稱空間建立連接(從Windows Vista開始,必須使用root\SecurityCenter2名稱空間),然后查詢AntiVirusProductWMI類。
看看這個示例代碼
using System;
using System.Text;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
public static bool AntivirusInstalled()
{
string wmipathstr = @"\\" + Environment.MachineName + @"\root\SecurityCenter";
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipathstr, "SELECT * FROM AntivirusProduct");
ManagementObjectCollection instances = searcher.Get();
return instances.Count > 0;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return false;
}
public static void Main(string[] args)
{
bool returnCode = AntivirusInstalled();
Console.WriteLine("Antivirus Installed " + returnCode.ToString());
Console.WriteLine();
Console.Read();
}
}
}

TA貢獻1811條經驗 獲得超6個贊
在Vista SP2及更高版本中,WMI查詢略有變化。
試試這個部分\ root \ SecurityCenter2而不是\ root \ SecurityCenter
結果也略有不同。您仍然可以獲取顯示名稱,但是您需要對ProductState字段進行一些位屏蔽,以確定onAccessScanner是否啟用/禁用以及upToDate類型的信息。
- 3 回答
- 0 關注
- 1058 瀏覽
添加回答
舉報