كيفية التحقق مما إذا كان فهرسة ملفات Windows أو إيقاف تشغيله

StackOverflow https://stackoverflow.com/questions/2238606

  •  19-09-2019
  •  | 
  •  

سؤال

هل هناك API في C أنه يمكنني استخدامه للتحقق مما إذا كان فهرسة الملفات أو إيقاف تشغيله؟ رمز موضع تقدير.

هل كانت مفيدة؟

المحلول

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 أو لهذه المسألة ميزات محددة منصة أخرى. يحدد Standard ISO C مجموعة صارمة من API مثل معالجة السلسلة، ومعالجة الملفات (مفتوحة، إغلاق، إلخ)، والعمليات الحسابية وما إلى ذلك وتحدد وتحدد البدائية التي تعمل عليها. هذه العمليات غير ملائمة للمنصة الأساسية. يتم تعريف كل هذه API بصرامة للغاية من خلال مواصفات اللغة نفسها (انظر معيار ISO C99 للرجوع إليه الحالي).

عليك أن تعتمد على مكتبة خارجية (إلى اللغة) للحصول على API الذي ترغب فيه (API لمعرفة ما إذا كان فهرسة الملفات قيد التشغيل أو إيقاف تشغيلها). إذن ما تريد أن تكتشفه هو أ) ما هي هذه المكتبة ب) ما هو API لاستخدامها من هذه المكتبة للاتصال من برنامج C و C) كيفية ربط هذه المكتبة في طلبك من بين أشياء أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top