Извлечь путь антивируса - windowsdefender: // - PullRequest
0 голосов
/ 28 марта 2019

при извлечении Установленного Антивируса через ManagementObjectSearcher в случае Защитника Windows путь, возвращаемый через «pathToSignedProductExe», буквально «windowsdefender: //», как я могу перевести это на фактический путь?

Я пробовал System.Environment.ExpandEnvironmentVariables, Path.GetFullPath или CD в CMD, и ничто не распознает это.

В случае «Microsoft Forefront Endpoint Protection» (Microsoft Security Client) возвращаемый путь - «C: \ Program Files \ Microsoft Security Client \ msseces.exe» и может быть легко использован.

Мой пример тестового кода (требуется установка Защитника Windows):

[TestClass]
public class AntiVirusExampleClass
{
    [TestMethod]
    public void GetAntiVirusPath()
    {
        var av = GetAntiVirusExe("Windows Defender");

        Assert.AreEqual(true, !string.IsNullOrEmpty(av), "Windows Defender not found");
    }

    public string GetAntiVirusExe(string avName)
    {
        string path = null;

        // Microsoft Security Client
        // SELECT * FROM AntiVirusProduct
        // SELECT * FROM FirewallProduct
        // SELECT * FROM AntiSpywareProduct
        // We are searching for Antivirus Product in Security Center (C:\Windows\System32\wbem\wscenter.mof)
        using (var wmiData = new ManagementObjectSearcher(@"root\SecurityCenter2", "Select * from AntivirusProduct"))
        {
            ManagementObjectCollection getSearchResult = wmiData.Get();

            if (getSearchResult.Count > 0)
            {
                foreach (ManagementObject virusChecker in getSearchResult)
                {
                    var antivirusName = virusChecker["displayName"] as string;
                    var pathToSignedProductExe = virusChecker["pathToSignedProductExe"] as string;

                    pathToSignedProductExe = System.Environment.ExpandEnvironmentVariables(pathToSignedProductExe);

                    if(!Path.IsPathRooted(pathToSignedProductExe))
                        pathToSignedProductExe = Path.GetFullPath(pathToSignedProductExe);

                  //Path here should be "C:\Program Files\Windows Defender"? :(

                    if (pathToSignedProductExe != null && pathToSignedProductExe.Contains(avName))
                    {
                        path = pathToSignedProductExe;
                        break;
                    }
                }
            }
        }

        return path;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...