2011-08-07 74 views
-1

可能重複:
Delphi: Prompt for UAC elevation when needed德爾福管理員權限D7 W7

我在Delphi編寫7的Windows 7應用程序的某些功能需要管理員權限。我怎樣才能從源代碼升級到管理員?

我檢查用戶權限,此代碼:

function IsUserAdmin : boolean; 
const CAdminSia : TSidIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5)); 
var sid : PSid; 
    ctm : function (token: dword; sid: pointer; var isMember: bool) : bool; stdcall; 
    b1 : bool; 
begin 
    result := false; 
    ctm := GetProcAddress(LoadLibrary('advapi32.dll'), 'CheckTokenMembership'); 
    if (@ctm <> nil) and AllocateAndInitializeSid(CAdminSia, 2, $20, $220, 0, 0, 0, 0, 0, 0, sid) then 
    begin 
    result := ctm(0, sid, b1) and b1; 
    FreeSid(sid); 
    end; 
end; 

如果應用程序開始以管理員身份,然後返回true;如果不是,則爲False。 現在,如果我有False因爲我想自動將程序升級到管理員。

我嘗試使用manifest升級到管理員,但是如果我啓動應用程序,那麼我會看到一個UAC提示,如果我回答「否」,那麼應用程序將不會運行。

有沒有機會尋求幫助?

我需要管理員權限才能訪問物理驅動器。

編輯:

我也試圖禁用UAC僅用於該應用(ParamStr這(0))也從代碼(按壓後「禁用UAC用於該應用」按鈕)。

+0

那麼只有擁有管理權限的用戶才能使用您的應用程序?它的應用程序如此我與我的用戶羣一起工作,以避免瘟疫。 有關UAC的其他說明,如果用戶無法通過UAC提示進行提升,提示必須提示用戶使用備用用戶名和密碼進行提升。這不是你在問題中解釋過的senerio。 – edusysadmin

+0

>「那麼只有擁有管理權限的用戶才能使用您的應用程序?」 不,只有一些危險的功能,我會通知用戶關於這個 – wcale

+3

@wcale - 如果你的程序可以繞過UAC並使其在管理員範圍內運行,UAC將是毫無意義的沒有? – techie007

回答

1

進程在啓動時收到它們的令牌,然後無法更改它們。因此,如果你想要一個應用程序似乎提升其功能的一部分,該功能必須涉及一個新的過程。你不能做的是提升現有的流程。

1

如果您希望它具有管理員權限,那麼您必須通過UAC。除非UAC被禁用,否則不能提升爲管理員,而不顯示UAC提示。顯然,你必須在UAC提示符中選擇YES才能賦予它管理員權限。

+0

此應用程序啓動並使用標準權限,不需要管理員。按「顯示/編輯物理驅動器」按鈕後,應用程序檢查它是否以管理員身份運行。如果不是,則使用UAC警告更改爲管理員。 如何從代碼中選擇管理員? UAC可能會顯示警告。 – wcale

+0

你的這個應用程序,它有什麼作用?這聽起來像一個有趣的應用程序,當然它不僅僅是一個標準的商業應用程序。它是某種磁盤實用程序應用程序嗎? – Marthinus

+0

@Marthinus它是加密應用程序 – wcale