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;
コメント