3

C 中有一个 API 可以用来检查文件索引是打开还是关闭?代码表示赞赏。

4

3 回答 3

1

WMI 可以提供这个,使用 Win32_Service 类。在“C”中执行此操作非常麻烦,SDK 仅提供C++ 示例。这是等效的 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();
    }
}
于 2010-02-10T17:24:13.453 回答
1

WMI 是 C++ 中的一个难题,但本机服务 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
}
于 2010-02-10T21:56:40.103 回答
-2

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

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

于 2010-02-10T20:58:55.363 回答