Как проверить, включена ли индексация Windows-файлов - PullRequest
3 голосов
/ 10 февраля 2010

Есть ли API в C, который я могу использовать, чтобы проверить, включена ли индексация файлов? Код приветствуется.

Ответы [ 3 ]

1 голос
/ 11 февраля 2010

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
}
1 голос
/ 10 февраля 2010

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();
    }
}
0 голосов
/ 10 февраля 2010

Чтобы быть педантичным, язык программирования C не знает ни об индексировании файлов Windows, ни о других специфических для платформы функциях. Стандарт ISO C определяет строгий набор API, например, для обработки строк, обработки файлов (открытия, закрытия и т. Д.), Арифметических операций и т. Д., А также определяет и определяет примитив, с которым они работают. Эти операции не зависят от базовой платформы. Все эти API определяются очень строго самой языковой спецификацией (текущий стандарт см. В стандарте ISO C99).

Вы должны полагаться на внешнюю (к языку) библиотеку, чтобы получить желаемый API (API, чтобы узнать, включена ли индексация файлов). Итак, вы хотите выяснить: а) что это за библиотека; б) какой API использовать из этой библиотеки для вызова из вашей программы на С; и в) как связать эту библиотеку с вашим приложением среди прочего.

...