如何从我的 C# 程序获取系统中安装的防病毒软件的路径
本文关键字:安装 防病毒 路径 软件 系统 获取 我的 程序 | 更新日期: 2023-09-27 18:32:08
我的C#程序需要打开安装在我的机器中的防病毒软件。
截至目前,我已经对路径进行了硬编码,如下所示:
System.Diagnostics.Process.Start("C:/Program Files (x86)/MyAntivirus/myAntivirus.exe");
但是,32 位和 64 位计算机的路径会有所不同。我无法在 64 位 Windows 8.1 机器上运行相同的代码。
有没有办法获取安装在我的机器中的防病毒软件的路径,以便我的程序独立于机器?
您可以询问窗口路径的位置,而不是硬编码防病毒软件的路径。大多数防病毒程序都会向Windows报告自己。这样 Windows 就不会向用户报告未安装防病毒软件。
使用 WMI,可以查询窗口以获取该路径。
var searcherPreVista = new ManagementObjectSearcher(string.Format(@"''{0}'root'SecurityCenter", Environment.MachineName), "SELECT * FROM AntivirusProduct");
var searcherPostVista = new ManagementObjectSearcher(string.Format(@"''{0}'root'SecurityCenter2", Environment.MachineName), "SELECT * FROM AntivirusProduct");
var preVistaResult = searcherPreVista.Get().OfType<ManagementObject>();
var postVistaResult = searcherPostVista.Get().OfType<ManagementObject>();
var instances = preVistaResult.Concat(postVistaResult);
var installedAntivirusses = instances
.Select(i => i.Properties.OfType<PropertyData>())
.Where(pd => pd.Any(p => p.Name == "displayName") && pd.Any(p => p.Name == "pathToSignedProductExe"))
.Select(pd => new
{
Name = pd.Single(p => p.Name == "displayName").Value,
Path = pd.Single(p => p.Name == "pathToSignedProductExe").Value
})
.ToArray();
foreach (var antiVirus in installedAntivirusses)
{
Console.WriteLine("{0}: {1}", antiVirus.Name, antiVirus.Path);
}
若要使用此代码,需要添加以下 using 语句:
using System;
using System.Linq;
using System.Management;
此外。添加对System.Management
的引用。
此代码将生成已安装的所有防病毒软件的列表。列表中的对象将具有名称和路径。如果我运行代码,它会显示以下内容:
Microsoft安全要点:C:''程序文件''Microsoft安全客户端''msseces.exe
您必须动态创建 AV 文件夹的路径。
string programFilesDirPath= Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
string path = Path.Combine(programFilesDirPath,"MyAntivirus","myAntivirus.exe");
希望这有帮助!