ファイルのインデックス作成がオンかオフかを確認するために使用できる C の API はありますか? コードは大歓迎です。
3 に答える
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) を取得するには、(言語の) 外部ライブラリに依存する必要があります。したがって、知りたいのは、a) このライブラリとは何か、b) このライブラリからどの API を使用して C プログラムから呼び出すか、c) このライブラリをアプリケーションにリンクする方法などです。