2017年3月11日土曜日

【備忘録】CurrentPathが違った話

今回はVB.NETでCurrentPathを取得するときの話です。

親アプリから子アプリを呼んで別の処理を行い、親は親アプリと同階層に
子は子アプリと同階層にそれぞれログ出力するシステムを作成しておりました。

が、
・親アプリから子アプリを呼び出した場合
・子アプリを直接起動した場合
では、ログの出力先が異なるという現象が発生しました。

下記の2つのメソッドは、両方ともカレントパスを取得するものです。

System.IO.Directory.GetCurrentDirectory()
Application.StartupPath()

上記現象が発生したとき、僕は前者のメソッドを使用していました。

説明が下手なので、イメージ用に簡易アプリで説明します。

【親アプリ】
処理:子を呼び出す。




【子アプリ】
処理:カレントディレクトリを取得。





■処理結果■

・親アプリから子アプリを呼び出した場合


・子アプリを直接起動した場合




おわかり頂けましたでしょうか。

そう、System.IO.Directory.GetCurrentDirectory()の場合は
親アプリから子アプリを起動すると、子アプリのカレントパスは
親アプリと同階層になってしまいます。

また、Application.StartupPath()の場合は、常に本来の
カレントパスを取得することができました。

いくらかネット検索をしてみましたが、同じような投稿が
見つけられなかったので備忘録として作成しておきました。

別アプリから呼び出される場合は、Application.StartupPath()を
使った方が良いなと感じました。