起動したプログラムの絶対パスを取得するには?

解決


バルス  2007-07-13 03:07:42  No: 143734

現在、特定のディレクトリにある特定のmdbファイルを、そのパスとファイル名を直接記述することで、プログラム起動時に参照するようにしています。

これを、プログラムと同じディレクトリに格納した特定のmdbファイルを、
プログラム起動時に自動で読み込むようにしたいのですが、
起動したプログラムの格納されたディレクトリへの絶対パスは、
どのようにして取得すればよいでしょうか。


魔界の仮面弁士  2007-07-13 04:17:32  No: 143735

MsgBox(My.Application.Info.DirectoryPath) とか。


バルス  2007-07-13 17:41:53  No: 143736

回答ありがとうございます。
ただ、「名前 'My' は宣言されていません。」とエラーになります。

使用しているのは、Microsoft Visual Studio .NET 2003 です。
この場合、Functionを新たに作る必要があるのでしょうか。


バルス  2007-07-13 17:50:18  No: 143737

自己解決しました。

MSDNでの、My.Application.Info.DirectoryPath の説明にあった、
「アプリケーションが格納されているディレクトリを取得」で検索したところ、
下記のページを得ることが出来ました。

http://msdn2.microsoft.com/ja-jp/library/system.appdomainsetup.applicationbase(VS.80).aspx

よって、下記のようにして取得することが出来ました。

Dim domaininfo As New AppDomainSetup
domaininfo.ApplicationBase = System.Environment.CurrentDirectory
MsgBox(domaininfo.ApplicationBase)


バルス  2007-07-13 23:58:53  No: 143738

さらに、下記でも取得できることが分かりました。

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)


YuO  2007-07-14 00:30:56  No: 143739

・CurrentDirectoryは起動したプログラムのあるパスとは限りません。
・Assembly.Locationはシャドウコピーされた場合にシャドウコピー先のパスを返します (NUnitとかで嵌る)。
というわけで,
Assembly.CodeBaseから引っ張ってくるのが一番確実なのではないかと。


バルス  2007-07-14 01:31:59  No: 143740

YuOさん

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)

を使用した場合は「file:」が先頭に付きましたが、
特に問題はないのでしょうか。


YuO  2007-07-15 23:58:40  No: 143741

> System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
> を使用した場合は「file:」が先頭に付きましたが、
> 特に問題はないのでしょうか。

プログラムの作り次第。
Uriを受け付けるのであれば大丈夫でしょうし,Uriを受け付けないのであればだめでしょう。
まぁ,System.UriクラスのLocalPathプロパティ使って変換してしまうのが手っ取り早いでしょうけど。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加