0

我按照这篇文章来提升一个进程,但是在我下面的代码中(目前几乎是一个副本),在调试时,我得到了无限数量的 shell。指示它发生的行。

我在这里查看了 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.
    }       
}   
4

1 回答 1

2

罗杰是对的:您正在启动一个程序副本,该程序启动该程序的副本等等。 - 缺少的是IsAppRunningAsAdminMode()您正在链接的文章中的功能:您应该先调用它,然后尝试启动一个新的提升仅当程序返回 false 时才复制程序 - 即仅当当前执行程序未提升时。

于 2013-08-05T14:58:33.847 回答