.NET TIPS ClickOnceアプリのディレクトリ・パスを取得するには?[2.0のみ、C#、VB]デジタルアドバンテージ 一色 政彦2006/09/22 2006/09/22 更新 |
![]() |
|
ClickOnceで配置したアプリケーション(以降、ClickOnceアプリ)は、自動的にClickOnce独自のアプリケーション・ストア(以降、ClickOnceキャッシュ領域)に格納される。このClickOnceキャッシュ領域は、ユーザーごとに存在する「C:\Documents and Settings\<ユーザー名>\Apps\2.0」フォルダの配下にあり、その中でさらにアプリケーションごとのフォルダに分けられて存在する。そのため、どのディレクトリ・パスにClickOnceアプリが存在するのかというのは、開発者が前もって知ることはできない(つまり、実行時に調べる必要があるのだ)。
実際にClickOnceアプリのディレクトリ・パスを調べるには、次の手順を実行すればよい。
- 実行中のメイン・アセンブリのフル・パスを取得する
- フル・パスからディレクトリ・パス部分を抽出する
具体的には、次のようなコードになる。
|
||
ClickOnceアプリのディレクトリ・パス部分を取得するサンプル・プログラム(上:C#、下:VB) |
まず1の手順を行うために、Assemblyクラス(System.Reflection名前空間)のGetEntryAssemblyメソッドを使ってメイン・アセンブリ(Assemblyオブジェクト)を取得し、そのLocationプロパティから実行されているClickOnceアプリのフル・パスを取得している。これについて詳しくは、「TIPS:実行ファイルのパスを取得するには?」を参考にしてほしい。
次にPathクラス(System.IO名前空間)の静的メソッドGetDirectoryNameを使ってフル・パスからディレクトリ・パス部分を抽出している。これについての詳細は、「TIPS:パス文字列からディレクトリ・パス部分を取り出すには?」を参考にされたい。
なおこの方法以外にも、Applicationクラス(System.Windows.Forms名前空間)の静的プロパティStartupPathからもClickOnceアプリのディレクトリ・パスは取得できる。
あとは、取得したClickOnceアプリのディレクトリ・パスをコンソールに出力しているだけだ。
ちなみに、従来のVisual Basic .NET(2002/2003)では、次のコード例のように、Assemblyクラスをコード内に記述する際、誤ってAssemblyキーワードと判別されないように角カッコ([ ])で囲む必要があった(詳しくは「TIPS:C#やVB.NETでキーワードを識別子として使用するには?」を参照してほしい)。
Dim asm As [Assembly] = [Assembly].GetEntryAssembly()
しかしVisual Basic 2005では、上記のサンプル・プログラムで示されているように角カッコは不要である(恐らくVBコンパイラの仕様が改善されたのだろう)。
|
なお、ClickOnceで配布したアプリケーションの各ファイルは、ClickOnceアプリのディレクトリ・パスの配下に格納される。従って、通常のファイルは本稿のように取得したディレクトリ・パスの配下のファイルを取り扱えばよいわけだが、データ・ファイル(.XMLファイルや.MDBファイルなど)だけは別のデータ・ディレクトリに格納される。データ・ディレクトリのパスの取得方法は「TIPS:ClickOnceデータ・ディレクトリのパスを取得するには?」にて紹介する。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Windowsフォーム 処理対象:ClickOnce 使用ライブラリ:Assemblyクラス(System.Reflection名前空間) 使用ライブラリ:Pathクラス(System.IO名前空間) 関連TIPS:実行ファイルのパスを取得するには? 関連TIPS:パス文字列からディレクトリ・パス部分を取り出すには? 関連TIPS:C#やVB.NETでキーワードを識別子として使用するには? 関連TIPS:ClickOnceデータ・ディレクトリのパスを取得するには? |
|
更新履歴 | |
|
![]() |
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
|
|
|
![]() |