質問

ある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"はfugly、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を取得するには、外部(言語への)ライブラリに依存しなければなりません。それでは、あなたが知りたいことは、このライブラリは、Cプログラムから呼び出すには、このライブラリーからどんなAPIを使用すると、c)どのように他のものの間で、アプリケーションにこのライブラリをリンクする)Bが何であるか)である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top