0

この記事に従ってプロセスを昇格させましたが、以下のコード (現在はほぼコピー) では、デバッグ時に無限の数のシェルが作成されます。それが発生する行が示されます。

ここで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 に答える