.NET TIPS

ClickOnceアプリケーションをデバッグするには?[VS 2005のみ、2.0のみ、C#、VB]

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

 開発しているClickOnceアプリケーション(以降、ClickOnceアプリ)が、例えば「ClickOnceの真実 第4回 ClickOnceテクノロジを最大限に生かす開発」で紹介されているサンプル・プログラムのように、ClickOnceデプロイメントAPIを活用して何らかの配布・更新処理を実装している場合、その処理の検証やデバッグは通常の方法では行えない。

 これらを行うには、ClickOnceアプリが配置された状態でデバッグしなければならないためだ。つまり、Webページ上のリンクをクリックして起動した状態のClickOnceアプリをデバッグする必要があるのだ(もちろんClickOnceアプリはデバッグ・モードでビルドして発行したものをデバッグする)。

 このような起動中のアプリケーションをデバッグする方法には、主に次の2つがある。

  1. プロセスにアタッチしてデバッグ
  2. System.Diagnostics.Debugger.Breakメソッドによるデバッグ・ブレイク

 本稿ではこの2つの方法により、ClickOnceアプリのデバッグを行う方法を紹介する。ここではVisual Studio 2005(以降、VS 2005)を使うことを前提とする。

 なお以下で詳しく説明するが、ClickOnceのセキュリティ設定が「完全信頼」(Full Trust)か「部分信頼」(Partial Trust)かによって、若干デバッグ方法が異なるので、その違いに注意してほしい。また、部分信頼のセキュリティ環境での動作を検証・デバッグすることが目的の場合には、別のデバッグ方法も用意されている。これについてはあらためて後日公開予定のTIPSで紹介しよう。

1. プロセスにアタッチしてデバッグ

 配置されたClickOnceアプリをデバッグする最も単純な方法は、実行中のClickOnceアプリのプロセスにアタッチすることである。

 ここで注意が必要なのが、ClickOnceアプリのプロセス名だ。完全信頼アプリケーションの場合は、プロジェクトのプロパティで指定した「アセンブリ名」+「.exe」という名前になる。しかし部分信頼アプリケーションの場合、常に「AppLaunch.exe」というプロセス名になる(この理由については「ClickOnceの真実 第2回 ClickOnceの仕組みを理解しよう」を読めばご理解いただけるだろう)。

 従って、完全信頼のClickOnceアプリのプロセスにアタッチするには、次の画面のような手順になる。

実行中のClickOnceアプリのプロセスにアタッチ
完全信頼のClickOnceアプリのプロセスにアタッチする手順
まずはデバッグ・モードでビルドしたアプリケーションをVS 2005の[発行]によりWebサーバ上に配置する。配置されたClickOnceアプリを起動した後、そのプロセスにアタッチする。
  VS 2005で発行したプロジェクト(ソリューション)を開いたままの状態で、そのメニュー・バーから[デバッグ]−[プロセスにアタッチ]を選択する。これにより、[プロセスにアタッチ]ダイアログが表示される。
  [選択可能なプロセス]の一覧から「<アプリケーション名>.exe」(この例では「WindowsApplication1.exe」)という名前のプロセスを選択する。
  [アタッチ]ボタンをクリックすれば完了だ。

 一方、部分信頼のClickOnceアプリの場合は次の画面のようになる。

部分信頼のClickOnceアプリのプロセスにアタッチする手順
部分信頼アプリケーションの場合は、常に「AppLaunch.exe」というプロセス名になる。「<アプリケーション名>.exe」という名前のプロセスは存在しないので注意すること。

2. System.Diagnostics.Debugger.Breakメソッドによるデバッグ・ブレイク

 上記の1の方法以外にも、プログラム・コードからデバッガのブレイク(=コード実行の中断)を呼び出すという手段が使える。ただしこれが利用可能なのは、完全信頼アプリケーションの場合だけなので注意すること。

 具体的には、Debuggerクラス(System.Diagnostics名前空間)の静的メソッドBreakをコード中で呼び出せばよい。例えば次のようなコードになる。

private void Form1_Load(object sender, EventArgs e)
{
#if DEBUG
  System.Diagnostics.Debugger.Break();
#endif
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
#If DEBUG Then
  System.Diagnostics.Debugger.Break()
#End If
End Sub
デバッガのブレイクを呼び出すコード(上:C#、下:VB)

 なお、このSystem.Diagnostics.Debugger.Breakメソッドでデバッグ・ブレイクするコードはあくまでデバッグ・検証用のものなので、最終的な製品版に残らない(=消す)ように注意しなければならない。このコードで記述している「#if DEBUG 〜 #endif」や「#If DEBUG Then 〜 #End If」は、デバッグ・モードのプログラムにしかこのコードを含めないということを意味している(詳しくは「TIPS:テスト用コードをデバッグ時にのみ実行するには?」を参照されたい)。

 上記のコードを含むClickOnceアプリを実行すると、その起動時(厳密にはWindowsフォームがロードされるとき)に、次のようなダイアログが表示され、ここからデバッグに使用するデバッガを選べる(※デバッガがアタッチされていない場合の挙動であり、VS 2005がそのClickOnceアプリのプロセスにアタッチされた状態のときは、このダイアログは表示されずに単にコードの実行をブレイクするという動作になる)。

デバッグに使用するデバッガ(=アタッチ先のデバッガ)の選択
VS 2005でデバッグしたいプロジェクトが開いている状態なら、それ(この例では「WindowsApplication1 - Microsoft Visual Studio: Visual Studio 2005」)を選択すればよい(推奨)。もし開いていない状態であれば、「新しいインスタンス Visual Studio 2005」を選択すればよい。「選択したデバッガを使ってデバッグしますか?」で[はい]を選択すると、実際にVS 2005を使ったデバッグを開始できる。

 基本的には、あらかじめVS 2005でデバッグしたいプロジェクトを開いている状態にしておき、上記の[Visual Studio Just-In-Time デバッガ]ダイアログが表示されたら、処理を行うデバッガとしてそのVS 2005を選択すればよい。これにより、そのVS 2005にClickOnceアプリのプロセスがアタッチされるので、あとは通常どおりデバッグ作業が行える。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:ClickOnce
使用ライブラリ:Debuggerクラス(System.Diagnostics名前空間)
関連TIPS:テスト用コードをデバッグ時にのみ実行するには?

この記事と関連性の高い別の.NET TIPS
部分信頼のClickOnceアプリケーションをデバッグするには?
ClickOnceアプリのディレクトリ・パスを取得するには?
ClickOnceデータ・ディレクトリのパスを取得するには?
ClickOnceのログ・ファイルを特定の場所に作成するには?
ClickOnceオンライン・キャッシュ領域のサイズを変更するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム 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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間