2011-08-07 32 views
-1

可能性の重複:Windows 7のためのDelphi 7で書かれ
Delphi: Prompt for UAC elevation when neededDelphiの管理者権限D7 W7

私のアプリケーションは、いくつかの機能のために管理者権限が必要です。どうすれば管理者にソースコードからそれを上げることができますか?

私はこのコードでユーザー権限チェック:アプリケーションが管理者として起動した場合、それはTrueを返し、

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; 

を。そうでない場合はFalseを返します。 結果がFalseの場合、自動的にプログラムを管理者に昇格させたいと思います。

私は管理者に昇格させてみましたが、アプリケーションを起動するとUACプロンプトが表示され、「いいえ」と答えるとアプリケーションはまったく実行されません。

お手伝いが必要ですか?

物理ドライブへのRAWアクセスの管理者権限が必要です。

EDIT:

Iはまた、( "このアプリケーションのUACを無効にする" ボタンを押した後)もコードからのみ、このアプリケーション(ParamStr(0))のためにUACを無効にしようとしました。

+0

管理者権限を持つユーザーのみがアプリケーションを使用できますか?このようなアプリは、私のユーザベースで疫病を避けるために働いています。 UACに関する追加の注意点として、ユーザーがUACプロンプトを使用して昇格させることができない場合は、プロンプトに代替ユーザー名とパスワードで昇格させる必要があります。これはあなたの質問であなたが説明したセネリオではありません。 – edusysadmin

+0

> "管理者権限を持つユーザーのみがアプリケーションを使用できますか?" いいえ、いくつかの危険な機能しかありません。このことについてユーザーに通知します。 – wcale

+3

@wcale - あなたのプログラムがUACを回避し、管理者の範囲内で実行できる場合、UACは無意味でしょうか? – techie007

答えて

1

プロセスは起動時にトークンを受け取り、変更できません。したがって、その機能の一部のサブセットに対して昇格しているように思われるアプリが必要な場合は、その機能に新しいプロセスが必要です。あなたができないことは、既存のプロセスを高めることです。

1

管理者権限が必要な場合は、UACを経由する必要があります。 UACが無効でない限り、UACプロンプトが表示されていない管理者に昇格させることはできません。明らかに、管理者権限を与えるには、UACプロンプトでYESを選択する必要があります。

+0

このアプリケーションは標準の権限で起動し、管理者はいません。 「物理ドライブの表示/編集」ボタンを押すと、アプリケーションが管理者として実行されているかどうかを確認します。そうでない場合は、UAC警告を使用して管理者に変更してください。 コードから管理者を引き付ける方法は? UACが警告を表示することがあります。 – wcale

+0

あなたのこのアプリケーションは、何をしていますか?興味深いアプリケーションのように聞こえますが、確かに標準的なビジネスアプリケーションではありません。それは何らかのディスクユーティリティアプリケーションですか? – Marthinus

+0

@Marthinusそれは暗号アプリケーションです – wcale

関連する問題