プログラムのコードで別のプログラムを管理者として実行する - C#

プログラムのコードから、別のプログラムを管理者として実行するコードを紹介します。

現在のユーザーモードで他のプログラムを実行する

管理者ではなく、通常のユーザーとして他のプログラムを実行する場合は、以下の記事を参照してください。

概要

管理者として実行する場合は、Processクラスのインスタンスの"StartInfo.Verb"プロパティに"RunAs"を指定します。

プログラム例

UI

下図のUIを作成します。フォームにボタンを1つ配置します。

コード

下記のコードを記述します。ButtonのOnClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace RunAsAdministrator
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Process proc = new Process();
      proc.StartInfo.FileName = @"notepad.exe";
      proc.StartInfo.Verb = "RunAs";
      proc.Start();
    }
  }
}

解説

外部プログラムの実行に関してはProcessクラスを利用する点では「他のexeファイルを実行する」と同じです。

Process proc = new Process();
管理者として実行する場合はStartInfoの各種パラメーターに値を設定するため、Processクラスのスタティックメソッドを用いずに、インスタンスを作成します。

proc.StartInfo.FileName = @"notepad.exe";
proc.StartInfo.Verb = "RunAs";
インスタンスのstart()メソッドを呼び出す前に、StartInfoに値を設定します。
実行するファイル名はStartInfoのFileNameプロパティに設定します。今回はメモ帳を起動するため"notepad.exe"を指定します。また、Verbプロパティに"RunAs"を設定します。

proc.Start();
StartInfoに設定した情報に基づきプロセスを開始します。

実行結果

プロジェクトを実行します。ヵ図のウィンドウが表示されます。[notepad起動]ボタンをクリックします。


[ユーザー アカウント制御]ダイアログが表示され、管理者として起動するかの確認画面が表示されます。


[ユーザー アカウント制御]ダイアログで[はい]ボタンをクリックすると、メモ帳が管理者権限で起動します。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2014-10-06
iPentec all rights reserverd.