远程系统上的C ++启动/停止服务有时会返回错误1722(RPC服务器不可用)

我有一个c++到远程系统上的startstop服务的应用程序。 有时,当我运行该应用程序时,我得到了错误代码1722 - The RPC server is unavailable。如果我重新启动应用程序,一切将再次正常运行。

RemoteSystem可能是Windows 10或更高版本的Windows XP。

这是我用来查询服务状态和起止站点的代码。

    HANDLE hToken;
    BOOL ret = LogonUserA("user",".","pwd",LOGON32_LOGON_NEW_CREDENTIALS,LOGON32_PROVIDER_WINNT50,&hToken);
    BOOL ret2 = ImpersonateLoggedOnUser(hToken);

    SC_HANDLE _handle;

    _handle = OpenSCManagerA("remoteSystem",NULL,SC_MANAGER_ALL_accESS);

    if (!_handle) {
        auto err = GetLastError();
        std::cout << err << std::endl;
        return err;
    }

    SC_HANDLE _serviceHandle;

    _serviceHandle = OpenServiceA(_handle,"Spooler",SERVICE_ALL_accESS);

    if (!_serviceHandle) {
        auto err = GetLastError();
        std::cout << err << std::endl;
        return err;
    }

    SERVICE_STATUS ss;

    if (!QueryServiceStatus(_serviceHandle,&ss)) {
        auto err = GetLastError();
        std::cout << err << std::endl;
        return err;
    }

    if (ss.dwCurrentState == SERVICE_RUNNING) {
        SERVICE_STATUS svcStatus;
        if (!ControlService(_serviceHandle,SERVICE_CONTROL_STOP,&svcStatus)) {
            auto err = GetLastError();
            std::cout << err << std::endl;
            return err;
        }
    } else if (ss.dwCurrentState == SERVICE_STOPPED) {
        if (!StartService(_serviceHandle,NULL)) {
            auto err = GetLastError();
            std::cout << err << std::endl;
            return err;
        }
    }

我还使用了OpenSCManagerW方法,并传递了一些具有相同结果的宽字符串。 我无法真正重现该问题,因为它似乎完全是随机发生的

hn3dbdbdb 回答:远程系统上的C ++启动/停止服务有时会返回错误1722(RPC服务器不可用)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3137496.html

大家都在问