Повышение процесса через 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 - т.е. только если текущая программа выполнения не повышена.

Другие вопросы по тегам