如何检查Windows文件索引是ON还是OFF

时间:2010-02-10 16:46:32

标签: c winapi indexing-service

我是否可以使用C来检查文件索引是打开还是关闭? 代码表示赞赏。

3 个答案:

答案 0 :(得分:1)

WMI可以提供此功能,使用Win32_Service类。在'C'中执行此操作非常简单,SDK仅提供C++ samples。这是等效的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();
    }
}

答案 1 :(得分:1)

WMI是C ++的一个难题,但本机Service 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
}

答案 2 :(得分:-1)

要迂腐,C编程语言不了解Windows文件索引或其他特定于平台的功能。 ISO C标准规定了一组严格的API,如字符串处理,文件处理(打开,关闭等),算术运算等,并指定和定义它们所处理的原语。这些操作与底层平台无关。所有这些API都由语言规范本身严格定义(参见当前参考的ISO C99标准)。

您必须依赖外部(语言)库来获取所需的API(API以确定文件索引是打开还是关闭)。所以你想知道的是a)这个库是什么b)从这个库中使用什么API来从你的C程序调用,以及c)如何将这个库链接到你的应用程序等等。