管理者として実行されていないアプリケーションから、次のコードがあります。
ProcessStartInfo proc = new ProcessStartInfo();
proc.WindowStyle = ProcessWindowStyle.Normal;
proc.FileName = myExePath;
proc.CreateNoWindow = false;
proc.UseShellExecute = false;
proc.Verb = "runas";
Process.Start(proc)を呼び出すと、管理者として実行する許可を求めるポップアップが表示されず、exeは管理者として実行されません。
MyExePathにある実行可能ファイルにapp.manifestを追加して、requestedExecutionLevelを
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
更新されたapp.manifestのProcess.Start(proc)呼び出しで、「要求された操作には昇格が必要です」という例外が表示されます。
.Verbアクションが管理者権限を設定しないのはなぜですか?
Windows Server 2008 R2 Standardでテストしています。
あなたmustはShellExecute
を使用します。 ShellExecuteは、昇格するためにConsent.exe
を起動する方法を知っている唯一のAPIです。
C#では、ShellExecute
を呼び出す方法は、Process.Start
とともにUseShellExecute = true
を使用することです。
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
Process.Start(info);
}
優れた開発者になりたい場合は、ユーザーがクリックしたときにキャッチできますNo:
private void button1_Click(object sender, EventArgs e)
{
const int ERROR_CANCELLED = 1223; //The operation was canceled by the user.
ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Notepad.exe");
info.UseShellExecute = true;
info.Verb = "runas";
try
{
Process.Start(info);
}
catch (Win32Exception ex)
{
if (ex.NativeErrorCode == ERROR_CANCELLED)
MessageBox.Show("Why you no select Yes?");
else
throw;
}
}
CreateProcess
が昇格できないことを説明し、プロセスを作成するだけです。 ShellExecute
はConsent.exeの起動方法を知っている人で、Consent.exeはグループポリシーオプションを確認する人です。注:パブリックドメインにリリースされたコード。帰属は必要ありません。