Как построить запрос WMI - PullRequest
9 голосов
/ 07 июня 2011

Я хотел бы найти результаты, которые Name начинается с param1 и заканчивается param2, но мой код не работает

string wmiQuery = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name LIKE '{0}%' AND Name LIKE '%{1}'", param1, param2);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();

Что не так?

Для сравнения

string wmiQuery = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name LIKE '{0}%'", param1);

хорошо работает

Ответы [ 2 ]

15 голосов
/ 07 июня 2011

Попробуйте это:

string wmiQuery = string.Format("SELECT CommandLine FROM Win32_Process WHERE Name LIKE '{0}%{1}'", param1, param2);

Добавление информации о тестировании:

string wmiQuery = string.Format ( "SELECT Name, ProcessID FROM Win32_Process WHERE Name LIKE '{0}%{1}'", "wpf", ".exe" );

Console.WriteLine ( "Query: {0}", wmiQuery );

ManagementObjectSearcher searcher = new ManagementObjectSearcher ( wmiQuery );
ManagementObjectCollection retObjectCollection = searcher.Get ( );

foreach (ManagementObject retObject in retObjectCollection)
{
    Console.WriteLine ( "[{0}]\tName: {1}", retObject[ "ProcessID" ], retObject["Name"] );
}

Выход:

Запрос: ВЫБЕРИТЕ Имя, ProcessID ОТ Win32_Process ГДЕ НРАВИТСЯ Имя 'МОФ% .exe'
[896] Имя: WPFFontCache_v0400.exe

8 голосов
/ 07 июня 2011

Для построения запросов WMI используйте бесплатный инструмент от Microsoft, известный как WMI Code Creator на разных языках программирования VBS, VB.NET, C #

. Загрузите его с http://www.microsoft.com/downloads/en/details.aspx?familyid=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

...