Question

Y at-il une API en C que je peux utiliser pour vérifier si l'indexation des fichiers est activé ou désactivé? Code est apprécié.

Était-ce utile?

La solution

WMI est une douleur dans C ++, mais l'API de service natif est assez propre.

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
}

Autres conseils

WMI peut fournir, utilisez la classe Win32_Service. Faire cela dans 'C' est fugly, le SDK ne fournit que les échantillons C de . Ceci est l'équivalent du code 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();
    }
}

Pour être pédant, le langage de programmation C n'a pas connaissance de l'indexation de fichiers Windows ou pour cette matière d'autres caractéristiques spécifiques à la plateforme. La norme ISO C spécifie un ensemble strict de l'API comme pour la gestion des chaînes, de gestion des fichiers (ouvrir, fermer, etc.), des opérations arithmétiques, etc. et précise et définit la primitive qu'ils agissent sur. Ces opérations sont agnostique de la plate-forme sous-jacente. Tous ces API sont définis de manière très stricte par la spécification du langage lui-même (voir la norme ISO C99 pour un courant de référence).

Vous devrez compter sur une bibliothèque externe (la langue) pour obtenir l'API que vous désirez (API pour savoir si l'indexation de fichiers est activé ou désactivé). Donc ce que vous voulez savoir est) ce que cette bibliothèque est b) ce que l'API à utiliser dans cette bibliothèque pour appeler à partir de votre programme C et c) comment relier cette bibliothèque à votre application entre autres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top