none
怎么通过C#编程的方式获取杀毒软件的一揽子信息?我知道怎么获取杀软名称和版本号。 RRS feed

  • 问题

  • 我想通过c#编程的方式,获取杀毒软件的名称,杀软的病毒版本号,最关键的是获取杀软的最后一次扫描日期,还有杀软的引擎版本号。通过访问WMI的方式可以获取一部分杀软信息。
    string getvirus()
            {
                try
                {
                    string myvirus = "";
                    ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher("root\\SecurityCenter",
                        "SELECT * FROM AntiVirusProduct");
                    foreach (ManagementObject queryObj in searcher.Get())
                    {
                        MessageBox.Show(queryObj["displayName"].ToString());
                        if (queryObj["displayName"].ToString() != "")
                        {
                            myvirus += "您正在使用" + queryObj["companyName"].ToString() + "的杀毒软件\n\r";
                        }
                        if (queryObj["displayName"].ToString() != "")
                        {
                            myvirus += queryObj["displayName"].ToString() + "\n\r";
                        }
                        if (queryObj["versionNumber"] != null)
                        {
                            myvirus += "版本号:" + queryObj["versionNumber"].ToString() + "\n\r";
                        }
                    }
                    return myvirus;
                }
                catch
                {
                    return "error";
                }

    但是我想获取杀软最后一次扫描日期以及杀软病毒库是否处于最新状态怎么办?任何建议都可以,非常感谢。我想去英文论坛提问,但是英文写作能力很差,只能阅读,如有人能帮我将问题翻译下,不胜感激!!
    2013年5月12日 4:00

答案

  • 你好,请确保你的路径正确,在我的PC上是root\\SecurityCenter2 而非root\\SecurityCenter

    具体参考我的这篇博客文章介绍了如何查询路径是否正确。

    http://kosmisch.net/Blog/DotNetEssential/Archive/2013/5/19/0f5ee27ecded4fd589334324cf0e2dca.html

    C#代码如下

    private static void UsingWMI()
            {
                WqlObjectQuery wqlQuery = new WqlObjectQuery("SELECT * FROM AntiVirusProduct");
    
                string computer = Environment.MachineName;   
                string path = @"\\" + computer + @"\root\SecurityCenter2";   
    
                ManagementScope scope = new ManagementScope
                {
                    Path = new ManagementPath(path)
                };
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wqlQuery);
    
                ManagementObjectCollection instances = searcher.Get();
                foreach (ManagementObject obj in instances)
                {
                    foreach (var property in obj.Properties)
                    {
                        Console.WriteLine("{0}:{1}", property.Name, property.Value);
                    }
                }
            }

    你需要的更新日期,可以从属性timestamp获取。

    timestamp:Sun, 19 May 2013 13:26:41 GMT


    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    微软中文论坛同城社区成都QQ群:74268428
    My Blog http://kosmisch.net
    Chengdu,China

    2013年5月19日 15:58
    版主

全部回复

  • 这些信息恐怕WMI 查不到。

    这些信息你的看看 杀毒软件 会将他们放在那边, 然后直接去读那些位置或文件。

    一般情况下,你可以看看安装目录下有没有配置文件什么的。


    Mike Feng
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年5月13日 12:16
    版主
  • 你好,请确保你的路径正确,在我的PC上是root\\SecurityCenter2 而非root\\SecurityCenter

    具体参考我的这篇博客文章介绍了如何查询路径是否正确。

    http://kosmisch.net/Blog/DotNetEssential/Archive/2013/5/19/0f5ee27ecded4fd589334324cf0e2dca.html

    C#代码如下

    private static void UsingWMI()
            {
                WqlObjectQuery wqlQuery = new WqlObjectQuery("SELECT * FROM AntiVirusProduct");
    
                string computer = Environment.MachineName;   
                string path = @"\\" + computer + @"\root\SecurityCenter2";   
    
                ManagementScope scope = new ManagementScope
                {
                    Path = new ManagementPath(path)
                };
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wqlQuery);
    
                ManagementObjectCollection instances = searcher.Get();
                foreach (ManagementObject obj in instances)
                {
                    foreach (var property in obj.Properties)
                    {
                        Console.WriteLine("{0}:{1}", property.Name, property.Value);
                    }
                }
            }

    你需要的更新日期,可以从属性timestamp获取。

    timestamp:Sun, 19 May 2013 13:26:41 GMT


    Raymond Tang (Microsoft C# MVP)
    Denn Ich Gehoer nur mir
    微软中文论坛同城社区成都QQ群:74268428
    My Blog http://kosmisch.net
    Chengdu,China

    2013年5月19日 15:58
    版主