管理者権限で別のプロセスを起動する

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

自分のアプリから、別のexeを管理者で起動したい。

やりかた

ProcessクラスのItartInfoVerbを"RunAs"にする。

またその際、UseShellExecuteをtrueにして、そのプロセスをStartする。

そうすると、UACが開いて、管理者でそのプロセスが起動する。

using System.Diagnostics;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Process proc = new Process();
            proc.StartInfo.FileName = @"notepad.exe";

            proc.StartInfo.Verb = "RunAs"; // ★コレ
            proc.StartInfo.UseShellExecute = true; // ★コレもわすれないこと
            proc.Start();

            proc.WaitForExit();
            proc.Close();
        }
    }
}

UseShellExecuteをtrueにしないと、管理者になってくれなかった。

たしかUseShellExecuteは、.netFramework4.8まではデフォルトでtrueだったが、.netcore以降?でfalseになったので、trueを書いてあげないと上記が動かなくなった。
(ネットで調べると、結構UseShellExecuteをtrueにしてないサンプルが多いのはそのせい?)