らくの遊び場

プログラムでやったことを自由に描いていきます。C++/C#/Python/OpenCV/Tensorflow/Unity

【C#】ショートカットから起動するとDirectoryクラスのカレントディレクトリが違う問題

概要

アプリは実行すると基本的にexeのある場所をカレントディレクトリとし実行されますが、ショートカットから実行した場合その限りではありません。 相対パスで実行するショートカットに

%windir%\explorer.exe "

を使用していると

Directory.GetCurrentDirectory()
System.Environment.CurrentDirectory    

でパスを取得すると、上記のパスになってしまいます。 これではDirectoryクラスを相対パスで使用することが出来ません。 ですのでカレントディレクトリの移動を行う必要があります。

対策

System.AppDomain.CurrentDomain.BaseDirectory

でパスを取得すると、実行ファイルのパスが取得できるみたいです。 ですのでこのパスを使用してDirectoryクラスのカレントディレクトリを移動します。

string dir = System.AppDomain.CurrentDomain.BaseDirectory;
Directory.SetCurrentDirectory(dir);

これでDirectoryクラスで相対パスが普段と同じように使用することが出来ました。