Как проверить, включено или выключено индексирование файлов Windows

StackOverflow https://stackoverflow.com/questions/2238606

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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#:

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 из этой библиотеки использовать для вызова из вашей программы на C и в) как, среди прочего, связать эту библиотеку с вашим приложением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top