ボタンのクリックで cmd を管理者として実行する必要があります。できます。しかし、私は管理者として実行する必要があります。これはどのように行われますか?
ShellExecute(Handle, 'open', 'c:\Windows\system32\cmd.exe', nil, nil, SW_SHOWNORMAL)
ボタンのクリックで cmd を管理者として実行する必要があります。できます。しかし、私は管理者として実行する必要があります。これはどのように行われますか?
ShellExecute(Handle, 'open', 'c:\Windows\system32\cmd.exe', nil, nil, SW_SHOWNORMAL)
open
以下に示すように、動詞を the に置き換えrunas
ます。とにかく、パスのハードコーディングを避けるようにしてください:
uses
ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'runas', 'cmd.exe', nil, nil, SW_SHOWNORMAL);
end;
ElevationRequired
プロパティを Trueに設定して、ボタンに盾のアイコンを追加することもできます。
ShellExecute/Ex()
"runas"
動詞を使用することは、プログラムで昇格されたプロセスを開始する唯一の公式な方法です。特に、実行中の実行可能ファイルに昇格を呼び出すための独自のUACマニフェストがない場合はそうです。
ただし、昇格されたプロセスを開始する方法はそれだけではありません。次の記事をご覧ください。標高について詳しく説明し、CreateProcessElevated()
やShellExecuteElevated()
などのより柔軟な代替実装を提供しています。
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', '');