Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么OpenService()没有';检查窗口服务状态时是否不工作?_C++_Winapi - Fatal编程技术网

C++ 为什么OpenService()没有';检查窗口服务状态时是否不工作?

C++ 为什么OpenService()没有';检查窗口服务状态时是否不工作?,c++,winapi,C++,Winapi,整个下午我都在处理一个非常混乱的问题,我想通过QueryServiceStatusEx检查windows服务状态,但总是得到0。MSDN说 如果函数失败,则返回值为零。若要扩展 错误信息,请调用GetLastError。“ 为了获得更多的错误信息,我调用GetLastError,错误代码是1 错误\无效\句柄:句柄无效 这是我的代码,例如,我检查窗口服务:“后台处理程序”,我的代码哪里有错?为什么我不能使用OpenService()获得服务SC_句柄 bool-isServiceStart()

整个下午我都在处理一个非常混乱的问题,我想通过QueryServiceStatusEx检查windows服务状态,但总是得到0。MSDN说

如果函数失败,则返回值为零。若要扩展 错误信息,请调用GetLastError。“

为了获得更多的错误信息,我调用GetLastError,错误代码是1

错误\无效\句柄:句柄无效

这是我的代码,例如,我检查窗口服务:“后台处理程序”,我的代码哪里有错?为什么我不能使用OpenService()获得服务SC_句柄

bool-isServiceStart()
{
服务状态\过程状态;
SCU经理;
SC_处理服务;
//获取到scm数据库的hadnle
schSCManager=OpenSCManager(
NULL,//本地计算机
NULL,//服务活动数据库
SC_经理_所有访问权限
);
if(NULL==SCHManager){

qDebug()您的条件错误,当
QueryServiceStatusEx
返回非零时,您会写入
“hahaha始终为0”


删除条件中的
运算符,或者切换输出的位置。

如果条件错误,则在
QueryServiceStatusEx
返回非零时写入
“hahaha Always is 0”


要么删除条件中的
操作符,要么切换输出位置。

OMG!!!!!我整个下午都在做这个,一直认为我使用了一些错误的参数!!!!真是个白痴!!!OMG!!!!!我整个下午都在做这个,一直认为我使用了一些错误的参数!!!!真是个白痴!!!你的代码不完整;在pa中它似乎缺少一个
main()
函数和至少一个
#include
。请将您的代码作为问题的一部分,然后我们可以尝试复制并解决它。您还应该阅读。另外,您一直调用
GetLastError
太晚了。当它被记录为返回有意义的值时,您需要立即调用它。不要散布它与任何其他代码一起使用,这些代码可以更改
GetLastError
的返回值并使其无效。您的代码不完整;特别是,它似乎缺少一个
main()
函数和至少一个
#include
。请将您的代码作为问题的一部分,然后我们可以尝试复制并解决它。您还应该阅读。另外,您一直调用
GetLastError
太晚了。当它被记录为返回有意义的值时,您需要立即调用它。不要散布它可以与任何其他代码一起使用,这些代码可以更改
GetLastError
的返回值并使其无效。
bool isServiceStart()
{
    SERVICE_STATUS_PROCESS  status;
    SC_HANDLE schSCManager;
    SC_HANDLE schService;

    //get hadnle to the scm database
    schSCManager = OpenSCManager(
                NULL, //local machine
                NULL, //services acitive database
                SC_MANAGER_ALL_ACCESS
                );
    if(NULL == schSCManager){
        qDebug() << "Open SCManager failed: " << (GetLastError() == ERROR_ACCESS_DENIED);
        CloseServiceHandle(schSCManager);
        return false;
    }

    //Get a hadle to the service
    QString serviceName = "Spooler";
    schService = OpenService(
                schSCManager, //database
                (LPCTSTR)serviceName.data(),
                SERVICE_ALL_ACCESS
                );
    if(schService == NULL){
        qDebug() << "service doesn't exist: " << GetLastError();
        CloseServiceHandle(schSCManager);
        return false;
    }

    DWORD dwBytesNeeded;
    if(!QueryServiceStatusEx(
                schService,
                SC_STATUS_PROCESS_INFO,         // information level
                (LPBYTE) &status,             // address of structure
                sizeof(SERVICE_STATUS_PROCESS),
                &dwBytesNeeded    // size needed if buffer is too small
                ))
    {
        qInfo() << "service status" << status.dwCurrentState;
    }else{
        qInfo() << "hahaha alway is 0" <<GetLastError();
    }
    return false;

}