我有一个c++
到远程系统上的start
和stop
服务的应用程序。
有时,当我运行该应用程序时,我得到了错误代码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方法,并传递了一些具有相同结果的宽字符串。 我无法真正重现该问题,因为它似乎完全是随机发生的