Cómo comprobar si el archivo de indexación de Windows está activado o desactivado

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

  •  19-09-2019
  •  | 
  •  

Pregunta

¿Existe una API en C que puedo usar para comprobar si el archivo de indexación está encendido o apagado? Código es apreciado.

¿Fue útil?

Solución

WMI es un dolor en C ++, pero la API nativa de servicio es bastante limpio.

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
}

Otros consejos

WMI puede proporcionar esto, utilizar la clase Win32_Service. Hacer esto en 'C' se fugly, el SDK sólo proporciona Ejemplos de C ++ . Este es el código C # equivalentes:

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();
    }
}

Para ser pedante, el lenguaje de programación C no tiene ningún conocimiento de la indexación de archivos de Windows o para el caso otras características específicas de la plataforma. El estándar ISO C especifica un estricto conjunto de API como para manejo de cadenas, manejo de archivos (abrir, cerrar etc.), operaciones aritméticas, etc y especifica y define la primitiva que actúan. Estas operaciones son agnósticos de la plataforma subyacente. Todas estas API se definen de forma muy estricta por la misma (véase la norma ISO C99 para una referencia de corriente).

especificación del lenguaje

Usted tendría que depender de una biblioteca externa (a la lengua) para obtener la API que desee (API para averiguar si la indexación de archivos está activado o desactivado). Así que lo que quiere saber es a) lo que esta biblioteca es b) lo API para usar de esta biblioteca para llamar desde el programa de C y c) la forma de vincular esta biblioteca para su aplicación, entre otras cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top