2013-10-09 62 views
1

我正在開發需要管理權限的C#/ .NET應用程序。它將在WinXP和Win7下運行。爲了當用戶正在作爲STANDAR用戶(管理員組不構件)來請求的特權高程,我嵌入清單與線:如何在UAC關閉時提升應用程序?

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

而且,當在UAC被接通在Win7工作正常。用戶被提示要求提升權限,輸入憑證等。
問題是在UAC處於關閉狀態時在Win7中。應用程序在沒有UAC提示且沒有提升的權限的情況下啓動

當UAC關閉時,是否有辦法請求提升和彈出UAC提示?

+0

所以用戶不是本地管理員,但是當UAC開啓時,用戶將輸入與管理的一些其他憑證UAC提示中的權利? –

+0

[同樣的問題,基本上,之前已經問過。](http://stackoverflow.com/questions/90702/how-does-a-program-ask-for-administrator-privileges) –

+0

不,它沒有回答那裏。我已經在那裏說了什麼。問題是解決方案不能始終工作。這是一個問題。 –

回答

2

不,但有一個解決方法。

UAC關閉了而不是排除了以管理員身份運行應用程序(假設您有一個管理員密碼,因爲它看起來像你),只是讓它更難。正如你理所當然地指出,與UAC的殘疾人,並在清單中,右鍵單擊requireAdministrator集並選擇Run as administrator實際上並沒有提升的過程中,微軟表示:「Application might launch but will fail later

兩個步驟:

1)保持Shift並右鍵單擊應用程序並選擇Run as a different user。然後只需使用您的管理員用戶名和密碼進行身份驗證,並且您的應用程序應以管理員身份運行。它爲我工作。

screenshot

2)結構在運行asInvoker並檢查管理權限一個小的可執行文件。在沒有它們的情況下運行時,警告用戶,並告訴他們按Shift-Right Click,然後Run as a different user。如果您的小程序具有管理員權限,請使用ShellExecute來調用您的主requireAdministrator應用程序。有關流程圖,請參見Figure 9 here。你基本上用你自己的UAC對話框替換,因爲UAC是關閉的。

這裏是在計算器上從某處C++小的代碼示例,檢查管理員訪問:

BOOL IsUserAdmin(VOID) 
{ 
    BOOL b; 
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; 
    PSID AdministratorsGroup; 
    b = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup); 
    if(true==b) 
    { 
     if (!CheckTokenMembership(NULL, AdministratorsGroup, &b)) 
     { 
     b = FALSE; 
     } 
     FreeSid(AdministratorsGroup); 
    } 
    return(b); 
} 
相關問題