0

我跟着this article來升級一個進程,但是在我的代碼下面(幾乎是當前的一個副本),在調試的時候,我得到了無限數量的shell被創建。顯示它發生的行。通過ShellExecuteInfo提升進程 - 無限殼?

我看過MSDN文章here,但這並沒有給我太多的見解。 請告訴我做錯了什麼?

我是新來的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

它看起來像你啓動自己的副本,其中啓動自己的副本,其中啓動.... –

回答

2

羅傑是正確的:你正在啓動一個啓動程序等等,等等的副本程序的副本 - 現在缺少的是從要鏈接的文章IsAppRunningAsAdminMode()功能:你應該先叫它然後嘗試僅在程序返回false時才啓動程序的新升級副本 - 即僅在當前執行程序未升級時才啓動。

+0

好的謝謝。接下來我試了下,但是「fIsRunAsAdmin」被標記爲未定義? \t 'IsAppRunningAsAdminMode(); \t如果(fIsRunAsAdmin = FALSE){ \t \t //提升過程 \t} \t其他{ \t \t //什麼也不做,因爲已升高的過程 \t}' –

+0

@NickProwse:你是從拷貝函數本身文章到你的源代碼? – MiMo

+1

@NickProwse:'fIsRunAsAdmin = false'將'false'指定給'fIsRunAsAdmin' - 你想要的是'fIsRunAdAdmin == false' - 或者更好'!fIsRunAsAdmin' – MiMo