【发布时间】:2019-12-11 22:24:18
【问题描述】:
我正在尝试在 Windows 10 上的 C++ 应用程序中重新启动“postgres”服务,但我在访问权限方面遇到了一些问题(我的猜测)。我尝试以具有本地管理员权限的域用户和本地管理员的身份运行代码,但这些似乎都不起作用。我可以通过 services.msc 手动重启服务。代码在返回 NULL 的 OpenSCManager 处已经失败。我也尝试过其他访问权限,但 OpenService 失败了。这是我的代码
auto showError = []()
{
std::ostringstream os;
os << GetLastError();
qDebug() << "Restart PostgreSQL service failed : " << QString::fromStdString( os.str());
};
SERVICE_STATUS Status;
SC_HANDLE SCManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS );
if(SCManager == NULL)
showError();
SC_HANDLE SHandle = OpenService(SCManager, L"postgres", SERVICE_ALL_ACCESS );
if(SHandle == NULL)
showError();
if(!ControlService(SHandle, SERVICE_CONTROL_STOP, &Status))
showError();
do
{
QueryServiceStatus(SHandle, &Status);
qDebug() << "Checking Service Status...\n";
}while(Status.dwCurrentState != SERVICE_STOPPED);
if(!StartService(SHandle, 0, NULL))
showError();
std::cin.sync();
std::cin.ignore();
CloseServiceHandle(SCManager);
CloseServiceHandle(SHandle);
【问题讨论】:
-
GetLastError的结果是什么?是访问被拒绝还是其他原因? -
错误 5 访问被拒绝