スポンサーリンク

Windowsサービスのスタートタイプとファイルパスを取得

当サイトは、アフィリエイト広告を利用しています

Windowsサービスのスタートタイプとファイルパスを取得する。

環境:QT5.5

インクルードファイル

#include 
#include 

コード

 

    SC_HANDLE   schSCManager; 
    SC_HANDLE   schService; 
    DWORD   	dwBytesNeeded=0, cbBufSize=0;
    LPQUERY_SERVICE_CONFIG lpsc; 
    
    QString     strService = "testService";  	// サービス名
    LPCTSTR     lpSrvName = reinterpret_cast(strService.utf16());      

    //*** ローカルコンピュータ上のサービス制御マネージャに接続
    schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    if ( NULL == schSCManager ) {
        qDebug().noquote() << "Error:" <<  GetLastError() << endl;
        return false;
    }
    
    //*** サービスに接続
    schService = OpenService(schSCManager, lpSrvName, SERVICE_ALL_ACCESS);
    if ( NULL == schService ) {
        CloseServiceHandle(schSCManager);    
        qDebug().noquote() << "Error:" <<  GetLastError() << endl;
        return false;
    }    


    // 必要な領域の情報を取得
    if ( !QueryServiceConfig(schService,NULL,0,&dwBytesNeeded) ) {
        if ( ERROR_INSUFFICIENT_BUFFER != dwRet ) {
	        CloseServiceHandle(schService);         
	        CloseServiceHandle(schSCManager);    
	        qDebug().noquote() << "Error:" <<  GetLastError() << endl;
            return false;
        }
    }
    
    // 領域を確保
    lpsc = (LPQUERY_SERVICE_CONFIG)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, dwBytesNeeded);
    if ( NULL == lpsc  ) {
        CloseServiceHandle(schService);         
        CloseServiceHandle(schSCManager);      
        qDebug().noquote() << "Error:" << "HeapAlloc error." << endl;
        return false;
    }

    cbBufSize = dwBytesNeeded;    
    
    // サービス構成情報を取得
    if ( !QueryServiceConfig(schService,lpsc,cbBufSize,&dwBytesNeeded) ) {
        CloseServiceHandle(schService);         
        CloseServiceHandle(schSCManager);    
        qDebug().noquote() << "Error:" <<  GetLastError() << endl;
        return false;
    }

    // Start type 
    DWORD dwStartType =  lpsc->dwStartType;
     
    // File path
    QString strTemp = QString::fromWCharArray(lpsc->lpBinaryPathName);
    
    HeapFree(GetProcessHeap(), 0, lpsc);
    CloseServiceHandle(schService);  
    CloseServiceHandle(schSCManager); 
    
    return true;

コメント

タイトルとURLをコピーしました