Как получить путь антивируса, установленного в моей системе, из моей программы на C #?

1

Моя программа на С# должна открыть антивирус, установленный на моей машине.

На данный момент я жестко закодировал путь следующим образом:

System.Diagnostics.Process.Start("C:/Program Files (x86)/MyAntivirus/myAntivirus.exe");

Однако путь варьируется для 32- и 64-разрядной машины. Я не могу запустить тот же код на моей 64-битной машине Windows 8.1.

Есть ли способ получить путь к антивирусу, установленному на моей машине, чтобы моя программа была независимой от машины?

  • 0
    Вы всегда можете поместить путь в файл конфигурации .NET ....
  • 1
    Как вы можете быть уверены, что он установлен на диске C: Вы можете быть уверены, только если установщик Антивируса записывает куда-нибудь файл установки, например, в реестр, и в этом случае вы можете написать некоторый код для запроса реестра.
Показать ещё 1 комментарий
Теги:

2 ответа

2

Вместо 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

  • 0
    когда я запускаю код, он показывает: Norton Internet Security: C: \ Program Files (x86) \ Norton Internet Security \ Engine \ 20.1.0.24 \ WSCStub.exe Однако мне нужно открыть антивирус, следовательно, если я дам путь : System.Diagnostics.Process.Start (antivirus.Path.ToString ()). Нортон GUI не открывается.
  • 0
    когда я вручную иду по пути и пытаюсь запустить WSCStub.exe, графический интерфейс не открывается. Однако если перейти к: C: \ Program Files (x86) \ Norton Internet Security \ Engine64 \ 20.1.0.24 \ uiStub.exe, откроется графический интерфейс
Показать ещё 6 комментариев
1

Вам придется динамически создавать путь к папке AV.

string programFilesDirPath= Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
string path = Path.Combine(programFilesDirPath,"MyAntivirus","myAntivirus.exe");

Надеюсь это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню