2013-06-24 104 views
3

我有一個必須使用管理員權限執行的應用程序。如果UAC開啓,那麼一切都很好。但是,如果UAC已關閉,則啓動時不會出現提示(即使對於標準用戶),應用程序也會以受限制的權限啓動。在沒有UAC的情況下在系統上執行具有管理員權限的應用程序

帶動詞「runas」的開始過程不起作用。

有沒有什麼辦法可以顯示標準UAC登錄對話框並執行具有管理權限的應用程序,即使UAC已關閉?

更新: 清單包括:

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.1.6.0" processorArchitecture="X86" name="setup" type="win32"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <security> 
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
      </requestedPrivileges> 
     </security> 
    </trustInfo> 
</asmv1:assembly> 

和everithing是確定的,當UAC處於活動狀態。但是,如果UAC處於關閉狀態,則不起作用。

更新2::此行爲由MSDN Step 6: Create and Embed an Application Manifest (UAC)(請參閱表格「標準用戶帳戶的應用程序啓動行爲」最後一行)記錄。所以我無法用任何清單解決這個問題。還有其他解決方案嗎?

+1

這是你想要做什麼? http://stackoverflow.com/questions/2818179/how-to-force-my-net-app-to-run-as-administrator-on-windows-7 – Arie

+0

「UAC已關閉」的角度是一個模糊的。聽起來像該機器的管理員不想允許需要提升的程序運行。因此您無法在該機器上運行您的程序。直到你沒有提升或管理人員降級,這樣做纔會變得更好。我們無法幫助您達到目標。 –

+0

@HansPassant是正確的。如果您的應用*需要*管理員權限,並且該機器不允許提升的應用運行,那麼您無法運行您的應用,對不起。 (爲什麼您的應用需要管理員權限?) –

回答

2

我有一個非常類似的問題,我不認爲迄今爲止的意見解決了您的實際問題。我相信他們錯誤地認爲你的問題的意圖。雖然我的答案不會顯示您首次詢問的實際UAC對話框,但它會顯示解決方法。

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

下面是用C StackOverflow上一個小的代碼示例++從什麼地方來檢查管理員訪問:

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); 
} 
相關問題