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

» 2009年12月10日 05時00分 公開
[一色政彦デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 「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();
  }
}


Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。