0

重複の可能性:
Delphi:必要に応じてUACの昇格を求める
Delphi管理者権限D7 W7

Windows7でDelphi7を使用しています。アプリケーションの一部の機能には管理者権限が必要です。これには、物理​​ドライブへのRAWアクセスが必要です。ソースコードから管理者に昇格するにはどうすればよいですか?IE私は権利をチェックします:

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が発生した場合は、自動的に管理者に昇格します。

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

編集:または、コードからもこのアプリケーション(ParamStr(0))のUACのみを無効にします([このアプリケーションのUACを無効にする]ボタンを押した後)

4

1 に答える 1

3

アプリケーションの実行中に単に「昇格」することはできません。あなたがしなければならないことはあなたがあなたのアプリケーションから呼び出す別のアプリケーションまたはCOMDLLを持っていることです、そしてあなたはそうするときに必要な特権を指定します。

于 2011-08-08T02:14:09.890 に答える