Как проверить, включена ли индексация Windows-файлов
Есть ли API в C, который я могу использовать, чтобы проверить, включена ли индексация файлов? Код ценится.
3 ответа
WMI - это боль в C++, но собственный API-интерфейс службы довольно чистый.
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if(hSCManager)
{
SC_HANDLE hService = OpenService(hSCManager, _T("ServiceNameGoesHere"), SERVICE_QUERY_STATUS);
if(hService)
{
// service is installed
SERVICE_STATUS ServiceStatus;
if(ServiceQueryStatus(hService, &ServiceStatus))
{
// service is running
// get current state from ServiceStatus.dwCurrentState
}
else if(GetLastError() == ERROR_SERVICE_NOT_ACTIVE)
{
// service is not running
}
else
{
// error
}
CloseServiceHandle(hService);
hService = NULL;
}
else if(GetLastError() == ERROR_SERVICE_DOES_NOT_EXIST)
{
// service is not installed
}
else
{
// error
}
CloseServiceHandle(hSCManager);
hSCManager = NULL;
}
else
{
// error
}
WMI может обеспечить это, используя класс Win32_Service. Делать это в 'C' - бесполезно, SDK предоставляет только образцы C++. Это эквивалентный код C#:
using System;
using System.Management; // Add reference!!
class Program {
public static void Main() {
var searcher = new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Service WHERE Name='wsearch'");
foreach (ManagementObject queryObj in searcher.Get()) {
Console.WriteLine("State = {0}", queryObj["State"]);
}
Console.ReadLine();
}
}
Чтобы быть педантичным, язык программирования C не имеет никаких знаний об индексации файлов Windows или, в этом отношении, других специфических для платформы функций. Стандарт ISO C определяет строгий набор API, например, для обработки строк, обработки файлов (открытия, закрытия и т. Д.), Арифметических операций и т. Д., А также определяет и определяет примитив, с которым они работают. Эти операции не зависят от базовой платформы. Все эти API определяются очень строго самой языковой спецификацией (текущий стандарт см. В стандарте ISO C99).
Вы должны полагаться на внешнюю (к языку) библиотеку, чтобы получить желаемый API (API, чтобы узнать, включена ли индексация файлов). Итак, вы хотите узнать: а) что это за библиотека; б) какой API использовать из этой библиотеки для вызова из вашей программы на С; и в) как связать эту библиотеку с вашим приложением, среди прочего.