プロセス オブジェクトは、.NET では System.Diagnostics.Process クラスで表され、現在実行中の exe のファイル名は、Process.GetCurrentProcess().MainModule.FileName を呼び出すことで取得できます。ただし、このメソッドはファイル名を取得するだけです。プログラムの実行中に作業ディレクトリが切り替えられない場合は、System.IO.Path メソッドを呼び出して絶対パスを取得できます。ただし、現在のディレクトリはEnvironment.CurrentDirectoryを通じて取得することもでき、多くのソフトウェアはOpen Dialogを使用してファイルを開くときに作業ディレクトリを切り替えるため、このメカニズムは無効になります。
Windows フォーム アプリケーション内にある場合、現在のアプリケーションは System.Windows.Forms.Application オブジェクトとしても表され、その静的プロパティ Application.ExecutablePath および Application.StartupPath を通じて、実行可能ファイルのパスと起動パスを取得できます。 。
ただし、Windows アプリケーションやライブラリにない場合は、たとえ Application オブジェクトのプロパティを取得できたとしても、プロジェクト内の Assembly System.Windows.Forms への参照を追加する必要があり、非常に不便です。 。このとき、アセンブリの静的メソッド GetCallingAssembly または GetExecutingAssembly を通じて現在実行中のアセンブリを取得し、Assembly クラスの Location を通じてアセンブリの場所を取得できます。
ただし、Assembly を使用する場合、同時に、Assembly.GetCallingAssembly または Assembly.GetExecutingAssembly が .exe ファイルの場所を取得できない場合があります。 GAC に追加された厳密な名前を持つアセンブリは、実行時に .exe と同じディレクトリにある必要はありません。
.NET プロセスが開始されると、AppDomain が作成され、すべてのアセンブリが特定の AppDomain に読み込まれます。AppDomain の開始時に情報を取得できる SetupInformation 属性が提供されます。 .CurrentDomain.SetupInformation.ApplicationBase は、現在のアプリケーションが配置されているパスを取得します。
上記のメソッドで必要なディレクトリを取得した後、System.IO.Path メソッドを呼び出して、ファイル名、ディレクトリ名、絶対パスなどを取得できます。パス文字列の解析を停止し、代わりに System.IO.Path クラスを使用します。
.NET でアプリケーションを開発する場合、プロセス/アプリケーション -> AppDomain -> アセンブリの関係を理解すると、正しいロジックを実装するのに非常に役立ちます。