Como verificar se a indexação de arquivos do Windows é ON ou OFF
-
19-09-2019 - |
Pergunta
Existe uma API em C que eu posso usar para verificar se a indexação de arquivos está ligado ou desligado? Código é apreciado.
Solução
WMI é uma dor no C ++, mas o Serviço API nativa é muito limpo.
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
}
Outras dicas
WMI pode proporcionar isso, use a classe Win32_Service. Fazer isso em 'C' é fugly, o SDK fornece apenas amostras C ++ . Este é o código 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();
}
}
Para ser pedante, a linguagem de programação C não tem qualquer conhecimento de indexação de arquivos do Windows ou para que o assunto outras características específicas de plataforma. Os ISO C especifica padrão um rigoroso conjunto de API como para tratamento de string, manipulação de arquivo (abrir, fechar, etc.), etc. operações aritméticas e especifica e define o primitivo agem em cima. Estas operações são agnósticos da plataforma subjacente. Todos estes API são definidos muito estritamente pela especificação da linguagem em si (ver norma ISO C99 para uma referência atual).
Você teria que contar com uma biblioteca externa (para o idioma) para obter a API que você desejar (API para descobrir se a indexação de arquivos está ligado ou desligado). Então, o que você quer descobrir é a) o que esta biblioteca é b) o API para o uso desta biblioteca para chamar de seu programa C e c) como vincular esta biblioteca para a sua aplicação, entre outras coisas.