.NET TIPS

管理者としてほかのアプリケーションを実行するには?

デジタルアドバンテージ 一色 政彦
2009/12/10

 「TIPS:ほかのアプリケーションを実行するには?」や「TIPS:ほかのアプリケーションを実行してその終了を待つには?」では、Processクラス(System.Diagnostics名前空間)のStartメソッドを利用して、プログラム内からほかのアプリケーションを実行する方法を説明した。

 ところで、Windows VistaやWindows Server 2008 R2、Windows 7など最新のWindows OSでは、UAC(ユーザー・アカウント制御)というセキュリティ機構が採用されている。その環境下で、これらのTIPSの方法を用いてほかのアプリケーションを実行する場合、そのアプリケーションは一般ユーザーとして実行されるため、管理者権限が必要な処理(例えば、%ProgramFiles%の配下にあるファイルを書き換える処理など)ではUnauthorizedAccessException例外が発生して処理が失敗する。失敗しないようにするには、管理者として実行する必要がある。

 これを実現するには、ProcessStartInfoクラスのオブジェクト(System.Diagnostics名前空間)が持つVerbプロパティに「RunAs」を設定すればよい。Verbプロパティは、プロセス実行時のアクション(例えば、ドキュメントを印刷する動詞は「Print」。ほかに「Edit」「Open」「OpenAsReadOnly」「Printto」など)が指定できる。UAC環境下で「RunAs」を実行すると、管理者モードでプロセスを実行しようとする。

 なお、ProcessStartInfoオブジェクトは、Processクラス(System.Diagnostics名前空間)のオブジェクトのStartInfoプロパティから得られる。ProcessクラスとProcessStartInfoクラスの使い方は、「TIPS:ほかのアプリケーションを実行してその終了を待つには?」を参考にしてほしい。本稿での説明は割愛する。

管理者としてほかのアプリケーションを実行するサンプル・コード

 次のサンプル・コードは、Cドライブの直下に配置したCheckRole.exeファイルを管理者として実行するコンソール・アプリケーションである。

 CheckRole.exeは、「TIPS:ユーザーのセキュリティ権限を簡単に確認するには?(応用編)」で示したサンプル・プログラムで、現在実行されているアプリケーションが管理者権限を持つかどうかを表示できるコンソール・アプリケーションである。

using System.Diagnostics;

class Program
{
  static void Main(string[] args)
  {

    Process proc = new Process();
    proc.StartInfo.FileName=  @"C:\CheckRole.exe";
   
    // 管理者として実行
    proc.StartInfo.Verb = "RunAs";

    proc.Start();
    proc.WaitForExit();
    proc.Close();
  }
}
Imports System.Diagnostics

Module Module1
  Sub Main()
    Dim proc As New Process()
    proc.StartInfo.FileName = "C:\CheckRole.exe"

    ' 管理者として実行
    proc.StartInfo.Verb = "RunAs"

    proc.Start()
    proc.WaitForExit()
    proc.Close()
  End Sub
End Module
管理者としてほかのアプリケーションを実行するサンプル・コード(上:C#、下:VB)

 このプログラムを実行すると、次の画面のような、UACによる権限昇格の確認ダイアログが表示される。

権限昇格の確認ダイアログ

 このダイアログで[はい]を選択すると、次の画面のように、ほかのコンソール・アプリケーション(CheckRole.exe)が実行される。

実行されたほかのコンソール・アプリケーション(CheckRole.exe)

 上の画面の赤枠部分を見ると、管理者(Administrators)権限が有効(True)であることが確認できる。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
カテゴリ:クラス・ライブラリ 処理対象:UAC
使用ライブラリ:Processクラス(System.Diagnostics名前空間)
使用ライブラリ:ProcessStartInfoクラス(System.Diagnostics名前空間)
使用ライブラリ:UnauthorizedAccessExceptionクラス(System名前空間)
関連TIPS:ほかのアプリケーションを実行するには?
関連TIPS:ほかのアプリケーションを実行してその終了を待つには?
関連TIPS:ほかのアプリケーションを実行してその終了を待つには?

この記事と関連性の高い別の.NET TIPS
常に管理者としてアプリケーションを実行させるには?
ほかのアプリケーションを実行してその終了を待つには?
コンソール・アプリケーションの出力を取り込むには?
ほかのアプリを実行して終了コードを得るには?
[ASP.NET]Windows VistaでWebサイトのコピー機能を利用するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH