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