21

ボタンのクリックで cmd を管理者として実行する必要があります。できます。しかし、私は管理者として実行する必要があります。これはどのように行われますか?

 ShellExecute(Handle, 'open', 'c:\Windows\system32\cmd.exe', nil, nil, SW_SHOWNORMAL)
4

4 に答える 4

25

open以下に示すように、動詞を the に置き換えrunasます。とにかく、パスのハードコーディングを避けるようにしてください:

uses
  ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Handle, 'runas', 'cmd.exe', nil, nil, SW_SHOWNORMAL);
end;

ElevationRequiredプロパティを Trueに設定して、ボタンに盾のアイコンを追加することもできます。

于 2013-03-10T18:55:28.837 に答える
12

ShellExecute/Ex()"runas"動詞を使用することは、プログラムで昇格されたプロセスを開始する唯一の公式な方法です。特に、実行中の実行可能ファイルに昇格を呼び出すための独自のUACマニフェストがない場合はそうです。

ただし、昇格されたプロセスを開始する方法はそれだけではありません。次の記事をご覧ください。標高について詳しく説明し、CreateProcessElevated()ShellExecuteElevated()などのより柔軟な代替実装を提供しています。

Vista UAC:決定的なガイド

于 2013-03-10T20:01:48.910 に答える
0
uses ShellApi, ...;

function RunAsAdmin(const Handle: Hwnd; const Path, Params: string): Boolean;
var
  sei: TShellExecuteInfoA;
begin
  FillChar(sei, SizeOf(sei), 0);
  sei.cbSize := SizeOf(sei);
  sei.Wnd := Handle;
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := 'runas';
  sei.lpFile := PAnsiChar(Path);
  sei.lpParameters := PAnsiChar(Params);
  sei.nShow := SW_SHOWNORMAL;
  Result := ShellExecuteExA(@sei);
end;

// 例

RunAsAdmin(Handle, 'c:\Windows\system32\cmd.exe', '');
于 2016-05-03T03:17:24.377 に答える