如何检查 Windows 文件索引是否打开或关闭
-
19-09-2019 - |
题
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)如何除其他事项外这个库链接到你的应用程序。
不隶属于 StackOverflow