У меня есть приложение c++
для служб start
и stop
в удаленной системе. Иногда, когда я запускаю приложение, я получаю код ошибки 1722 - The RPC server is unavailable
. Если я перезапускаю приложение, все снова работает.
RemoteSystem может представлять собой Windows XP вплоть до Windows 10.
Это код, который я использую для запроса статуса службы и остановки запуска.
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, 0, NULL)) {
auto err = GetLastError();
std::cout << err << std::endl;
return err;
}
}
Я также использовал методы OpenSCManagerW и передаю несколько широких строк с тем же результатом. Я действительно не мог воспроизвести проблему, потому что она, кажется, произошла совершенно случайно