Domanda

C'è un'API in C che posso usare per verificare se indicizzazione dei file è acceso o spento? Codice è apprezzato.

È stato utile?

Soluzione

WMI è un dolore in C ++, ma l'API Service nativo è abbastanza pulito.

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
}

Altri suggerimenti

WMI può fornire questo, utilizzare la classe Win32_Service. Fare questo in 'C' è fugly, l'SDK fornisce solo campioni C ++ . Questo è il codice equivalente 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();
    }
}

Per essere pedante, il linguaggio di programmazione C non ha alcuna conoscenza di indicizzazione dei file di Windows o per quella materia altre caratteristiche specifiche della piattaforma. La norma ISO C specifica una rigida serie di API come per la gestione delle stringhe, la manipolazione di file (aperto, chiuso ecc), operazioni aritmetiche ecc e precisa e definisce il primitivo cui agiscono. Queste operazioni sono agnostico della piattaforma sottostante. Tutti questi API sono definite molto strettamente dalla specifica lingua stessa (vedi norma ISO C99 per un riferimento di corrente).

Si dovrebbe fare affidamento su una libreria esterna (per la lingua) per ottenere l'API che si desidera (API per scoprire se il file di indicizzazione è acceso o spento). Quindi, ciò che si vuole sapere è: a) quello che questa libreria è b) quello API da utilizzare da questa libreria per chiamare dal vostro programma C e C) come collegare questa libreria per l'applicazione tra le altre cose.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top