Повышение процесса через ShellExecuteInfo - бесконечные оболочки?
Я следовал за этой статьей для повышения уровня процесса, однако в моем коде ниже (в значительной степени копия в настоящее время), при отладке, я получаю бесконечное число создаваемых оболочек. Строка, на которой это происходит, указана.
Я посмотрел статью MSDN здесь, но это не дало мне много понимания. Посоветуйте пожалуйста что я делаю не так?
Я новичок в 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.
}
}
1 ответ
Роджер прав: вы запускаете копию программы, которая запускает копию программы и т. Д. И т. Д. - чего не хватает, так это IsAppRunningAsAdminMode()
Функция из статьи, на которую вы ссылаетесь: сначала вы должны вызвать ее, а затем попытаться запустить новую копию программы с повышенными правами, только если она возвращает false - т.е. только если текущая программа выполнения не повышена.