C 中是否有一个 API 可用于检查文件索引是否打开或关闭?代码受到赞赏。

有帮助吗?

解决方案

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
}

其他提示

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

要学究,C编程语言没有Windows文件索引的或与此有关的其他特定于平台的功能的任何知识。 ISO C标准规定了一套严格的像字符串处理的API,文件处理(开,关等),算术运算等,并指定并定义它们在行动的原始。这些操作是不可知的基础平台。所有这些API的由语言规范本身(参见电流参考ISO C99标准)。

定义非常严格

您将不得不依赖于外部(的语言)库来得到你想要(API找出文件索引是否开启或关闭)的API。所以,你要找出什么是)这是什么库为b)从该库使用的API从C程序中调用和c)如何除其他事项外这个库链接到你的应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top