自プロセス・アセンブリの情報
カレントディレクトリ
プロセスの現在のカレントディレクトリ(作業フォルダ)を取得するには、Environment.CurrentDirectoryプロパティを参照するかDirectory.GetCurrentDirectoryメソッドを呼び出します。 両者の違いはプロパティかメソッドかという点のみで、取得できる結果は同じです。
また、カレントディレクトリを設定するには、Environment.CurrentDirectoryプロパティに新しい値を設定するか、Directory.SetCurrentDirectoryメソッドを使って設定します。 なお、存在しないディレクトリをカレントディレクトリにしようとした場合、DirectoryNotFoundExceptionがスローされる点に注意が必要です。
環境変数
環境変数の取得・設定ついては環境変数で個別に解説しています。
現在実行中のアセンブリ
Assembly.GetExecutingAssemblyメソッドを使うことで現在実行しているコードのあるアセンブリを取得することが出来ます。 ここからさらに、アセンブリの情報について調べることが出来ます。
この他にも、Assembly.GetEntryAssemblyメソッドでエントリーポイント(Mainメソッド)を含むアセンブリ、Assembly.GetCallingAssemblyメソッドで現在実行中のメソッドを呼び出したアセンブリを取得することができます。 アセンブリの取得方法についてはリフレクション §.アセンブリの取得を参照してください。
ターゲットのランタイムバージョン
アセンブリをビルドしたときのランタイムバージョンを取得するには、Assembly.ImageRuntimeVersionプロパティを参照します。 このプロパティで取得できるバージョンは文字列で、形式はRuntimeEnvironment.GetSystemVersionメソッドの戻り値と同様です。
参照アセンブリ
あるアセンブリが参照しているアセンブリを取得するにはAssembly.GetReferencedAssembliesメソッドを使うことができます。
コマンドライン引数
現在のプロセスを起動したときのコマンドライン引数を取得するには、Mainメソッドでコマンドライン引数を受け取る文字列配列指定します。
これとは別にEnvironment.GetCommandlineArgsメソッドを使うことも出来ます。 Mainメソッドで引数を用意する場合と異なる点は、このメソッドを使うことで任意の箇所でコマンドライン引数を参照できることと、このメソッドで取得できるコマンドライン引数の先頭には実行可能ファイルの名前が格納されることの2点です。
また、Environment.CommandLineプロパティを参照すると、配列に分割される前のコマンドライン文字列を取得することが出来ます。
自プロセスのパス
自分自身のプロセス(現在実行している実行可能ファイル)のパスを取得するには、Assembly.GetEntryAssemblyメソッドで実行可能ファイルのアセンブリを取得し、そこからAssembly.Locationプロパティを参照することで取得できます。
このほか、Assembly.CodeBaseプロパティを参照することもできます。 ただし、CodeBaseプロパティは.NET 5にてObsoleteとなっています。 またCodeBaseプロパティはfile://スキームのURIとしてパスを返すので、ファイルパスとして取得するにはいったんUriクラスに変換したのちにLocalPathプロパティを参照する必要があります。
これとは別に、コマンドライン引数を参照する方法もあります。 Mainメソッドに渡されるコマンドライン引数には実行可能ファイルのパスは含まれませんが、先に解説したとおりEnvironment.GetCommandlineArgsメソッドで取得できるコマンドライン引数の先頭には実行可能ファイルの名前が格納されるので、ここから自プロセスのパスを取得することも出来ます。 ただし、NT系Windowsでは格納されるのはファイル名のみとなる点に注意が必要です。 Path.GetFullPathメソッドを使えばフルパスを取得できますが、カレントディレクトリが変更されている場合などは正しいパスを取得できるとは限りません。
このほかApplication.ExecutablePathプロパティからも自プロセスのパスを取得できます。
自プロセスの情報
Process.GetCurrentProcessメソッドを使うと自プロセスを取得出来ます。 このメソッドが返すインスタンスから自プロセスに関する様々な情報を取得することが出来ます。 取得出来る情報や可能な操作についての詳細はProcessクラスのドキュメントを参照してください。
自ファイルのバージョン
アセンブリのバージョン情報を設定・取得するで解説しています。
ロケール・カルチャ
スレッドのカルチャ
.NET Frameworkではスレッド毎にカルチャ(ロケール)が関連付けられます。 現在実行中のスレッドのカルチャを取得するには、Thread.CurrentThread.CurrentCultureプロパティを参照します。 CultureInfo.CurrentCultureプロパティでも同じ値を取得できます。
カルチャ・ロケールについて、CultureInfoで取得できるカルチャ固有の情報などについてはロケール(カルチャ)で詳しく解説しています。
デフォルトエンコーディング
システムで使われるデフォルトの文字コード(エンコーディング)を取得するには、Encoding.Defaultプロパティを参照します。
カルチャのエンコーディング
Encoding.Defaultプロパティからはシステムで使われているエンコーディングを取得できますが、特定のカルチャで使用されるエンコーディングを取得するにはTextInfo.ANSICodePageプロパティを参照します。 システムのカルチャとは異なるカルチャでアプリケーションを動作させている場合に、その環境に応じたエンコーディングを取得したい場合などはこのプロパティを使うことが出来ます。
TextInfoクラスについてはカルチャと書式・テキスト処理・暦で詳しく解説しています。