我跟着this article提升了一个进程,但是在我下面的代码中(当前几乎是一个副本),在调试时,我得到了无数个shell。它出现的线是指示的。
我查看了MSDN文章here,但这并没有给我太多的了解。 请告诉我我做错了什么?
我是c ++的新手。
wchar_t szPath[MAX_PATH];
if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)))
{
// Launch itself as admin
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.lpVerb = L"runas";
sei.lpFile = szPath;
sei.hwnd = NULL;
sei.nShow = SW_NORMAL;
if (!ShellExecuteEx(&sei)) //get infinite shells here
{
DWORD dwError = GetLastError();
if (dwError == ERROR_CANCELLED)
{
// The user refused to allow privileges elevation.
std::cout << "User did not allow elevation" << std::endl;
}
}
else
{
//other lines of code omitted.
}
}
答案 0 :(得分:2)
Roger是对的:你正在推出一个程序的副本,它启动程序的副本等等。 - 缺少的是你正在链接的文章中的IsAppRunningAsAdminMode()
函数:你应该先调用它然后尝试仅在它返回false时才启动程序的新高架副本 - 即仅当前执行程序没有被提升时。