-1

重複の可能性:
Delphi:必要に応じてUACの昇格を求める

Delphi 7 for 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が発生した場合、プログラムを自動的に管理者に昇格させたいと思います。

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

助けのチャンスはありますか?

物理ドライブにrawアクセスするには管理者権限が必要です。

編集:

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

4

2 に答える 2

1

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

于 2011-08-07T23:43:01.077 に答える
1

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

于 2011-08-08T06:36:37.843 に答える