2009-08-26 20 views
22

Gibt es eine Möglichkeit zu erkennen, ob eine Antivirus-Software in einem Computer mit C# installiert ist? Ich weiß, dass das Sicherheitscenter eine Antivirensoftware erkennt, aber wie erkennt man das in C#?Erkennen Sie Antivirus unter Windows mit C#

+0

ist es eine Möglichkeit zu wissen, ob Das Antivirenprogramm wird auf dem System unter Windows [email protected] aktualisiert ng.47 – TechBrkTru

+0

Sie können WMI verwenden; siehe [hier] (http://social.msdn.microsoft.com/Forums/en-US/windowssecurity/thread/bd97d9e6-75c1-4f58-9573-9009df5de19b). – SLaks

Antwort

31

Laut Microsoft verwendet das Windows-Sicherheitscenter einen zweistufigen Ansatz für den Erkennungsstatus. Eine Ebene ist manuell und die andere Ebene ist automatisch über Windows Management Instrumentation (WMI). Im manuellen Erkennungsmodus sucht das Windows-Sicherheitscenter nach Registrierungsschlüsseln und Dateien, die von unabhängigen Softwareherstellern an Microsoft bereitgestellt werden. Mithilfe dieser Registrierungsschlüssel und -dateien kann das Windows-Sicherheitscenter den Status von unabhängiger Software erkennen. Im WMI-Modus ermitteln Softwarehersteller ihren eigenen Produktstatus und melden diesen Status über einen WMI-Anbieter an das Windows-Sicherheitscenter zurück. In beiden Modi versucht das Windows-Sicherheitscenter festzustellen, ob das Folgende zutrifft:

Ein Antivirenprogramm ist vorhanden.

Die Antivirus-Signaturen sind auf dem neuesten Stand.

Echtzeit-Scans oder On-Access-Scans sind für Antivirus-Programme aktiviert.

Bei Firewalls erkennt Windows Security Center, ob eine Firewall eines Drittanbieters installiert ist und ob die Firewall aktiviert ist oder nicht.

Also, um das Vorhandensein einer Antivirus-Software, um zu bestimmen, können Sie die WMI Herstellen einer Verbindung zu dem root\SecurityCenter Namespace (beginnend mit Windows Vista müssen Sie den root\SecurityCenter2 Namespace), und dann für die AntiVirusProduct WMI-Klasse abfragen.

Schauen Sie sich das Beispielcode

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

    } 
} 
+1

Kann jemand das unter Windows 7 machen? – aHunter

+3

In Windows 7 müssen Sie den Namespace '\ root \ SecurityCenter2' verwenden – RRUZ

+0

Ich habe es auf Windows Server 2008 versucht. Allerdings erhalte ich eine Ausnahme" Invalid Namespace ". Es funktioniert unter Windows 7. – Rahil

3

Die WMI-Abfrage etwas in Vista SP2 ändert und darüber hinaus.

versuchen, diesen Teil \ root \ SecurityCenter2 statt \ Security von \ root

Die Ergebnisse auch leicht unterschiedlich sind. Sie können zwar weiterhin den Anzeigenamen abrufen, müssen jedoch eine Bitmaskierung für das ProductState-Feld durchführen, um festzustellen, ob der onAccessScanner aktiviert ist, und die Art von upToDate-Informationen.

2

Öffnen Sie C:\Windows\System32\wbem\wscenter.mof von Notepad. Es hilft Ihnen, die Namespaces und Klassen existieren:


C# Abfrage:

// SELECT * FROM AntiVirusProduct 
// SELECT * FROM FirewallProduct 
// SELECT * FROM AntiSpywareProduct 
ManagementObjectSearcher wmiData = new ManagementObjectSearcher(@"root\SecurityCenter2", "SELECT * FROM AntiVirusProduct"); 
ManagementObjectCollection data = wmiData.Get(); 

foreach (ManagementObject virusChecker in data) 
{ 
    var virusCheckerName = virusChecker["displayName"]; 
} 

wscenter.mof:

#pragma autorecover 
#pragma classflags(64) 
#pragma namespace("\\\\.\\root") 

[NamespaceSecuritySDDL("O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:(A;CI;0x1;;;BU)(A;CI;0x1;;;BA)(A;CI;0x1;;;NS)(A;CI;0x1;;;LS)(A;CI;0x1;;;AU)(A;CI;0x6001D;;;S-1-5-80-3232712927-1625117661-2590453128-1738570065-3637376297)")] 
Instance of __namespace 
{ 
    Name = "SecurityCenter"; 
}; 

[NamespaceSecuritySDDL("O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464D:(A;CI;0x1;;;BU)(A;CI;0x1;;;BA)(A;CI;0x1;;;NS)(A;CI;0x1;;;LS)(A;CI;0x1;;;AU)(A;CI;0x6001D;;;S-1-5-80-3232712927-1625117661-2590453128-1738570065-3637376297)")] 
Instance of __namespace 
{ 
    Name = "SecurityCenter2"; 
}; 
#pragma namespace("\\\\.\\root\\SecurityCenter") 

class AntiVirusProduct 
{ 
    [key,Not_Null] string instanceGuid; 
    [Not_Null] string displayName; 
    [Not_Null] boolean productUptoDate; 
    boolean onAccessScanningEnabled; 
    boolean productHasNotifiedUser; 
    boolean productWantsWscNotifications; 
    uint8 productState; 
    string companyName; 
    string versionNumber; 
    string pathToSignedProductExe; 
}; 

class FirewallProduct 
{ 
    [key,Not_Null] string instanceGuid; 
    [Not_Null] string displayName; 
    boolean enabled; 
    boolean productHasNotifiedUser; 
    boolean productWantsWscNotifications; 
    uint8 productState; 
    string companyName; 
    string versionNumber; 
    string pathToSignedProductExe; 
}; 

class AntiSpywareProduct 
{ 
    [key,Not_Null] string instanceGuid; 
    [Not_Null] string displayName; 
    [Not_Null] boolean productUptoDate; 
    boolean productEnabled; 
    boolean productHasNotifiedUser; 
    boolean productWantsWscNotifications; 
    uint8 productState; 
    string companyName; 
    string versionNumber; 
    string pathToSignedProductExe; 
}; 
#pragma namespace("\\\\.\\root\\SecurityCenter2") 

class AntiVirusProduct 
{ 
    [key,Not_Null] string instanceGuid; 
    [Not_Null] string displayName; 
    [Not_Null] string pathToSignedProductExe; 
    [Not_Null] string pathToSignedReportingExe; 
    [Not_Null] uint32 productState; 
    string timestamp; 
}; 

class FirewallProduct 
{ 
    [key,Not_Null] string instanceGuid; 
    [Not_Null] string displayName; 
    [Not_Null] string pathToSignedProductExe; 
    [Not_Null] string pathToSignedReportingExe; 
    [Not_Null] uint32 productState; 
    string timestamp; 
}; 

class AntiSpywareProduct 
{ 
    [key,Not_Null] string instanceGuid; 
    [Not_Null] string displayName; 
    [Not_Null] string pathToSignedProductExe; 
    [Not_Null] string pathToSignedReportingExe; 
    [Not_Null] uint32 productState; 
    string timestamp; 
}; 
#pragma autorecover 
Verwandte Themen