Моя программа на С# должна открыть антивирус, установленный на моей машине.
На данный момент я жестко закодировал путь следующим образом:
System.Diagnostics.Process.Start("C:/Program Files (x86)/MyAntivirus/myAntivirus.exe");
Однако путь варьируется для 32- и 64-разрядной машины. Я не могу запустить тот же код на моей 64-битной машине Windows 8.1.
Есть ли способ получить путь к антивирусу, установленному на моей машине, чтобы моя программа была независимой от машины?
Вместо hardcoding путь к антивирусу, вы можете спросить окна, где находится путь. Большинство антивирусных программ относятся к окнам. Так что 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 System;
using System.Linq;
using System.Management;
Дальше больше. Добавьте ссылку на System.Management
.
Этот код будет генерировать список всех установленных антивирусов. Объекты в списке будут иметь имя и путь. Если я запустил код, он отобразит следующее:
Microsoft Security Essentials: C:\Program Files\Microsoft Security Client\msseces.exe
Вам придется динамически создавать путь к папке AV.
string programFilesDirPath= Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
string path = Path.Combine(programFilesDirPath,"MyAntivirus","myAntivirus.exe");
Надеюсь это поможет!
C:
Вы можете быть уверены, только если установщик Антивируса записывает куда-нибудь файл установки, например, в реестр, и в этом случае вы можете написать некоторый код для запроса реестра.