C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で現在の実行ファイル名を取得する方法【AppDomain・Processの使い分け】

C#では、現在実行中の実行ファイル(exe)の名前を取得する方法がいくつかあります。代表的なのは「System.AppDomain」を使う方法と「System.Diagnostics.Process」を使う方法の2つです。それぞれ返される値が異なるため、目的に応じて使い分けることが重要です。

System.AppDomain を使う方法

アプリケーションドメインは、異なるアプリドメイン上で動作するコード同士を隔離するための仕組みです。AppDomainはプロセスと同じようにコードとデータの論理的なコンテナとして機能し、独立したメモリ空間とリソースへのアクセスを持ちます。さらに、ある実行中アプリケーション内のオブジェクトのデータに対して、別のアプリケーションから誤って、あるいは不正にアクセスすることを防ぐ境界線としても働きます。

System.AppDomainクラスは、このアプリケーションドメインを操作するための手段を提供しており、新しいアプリケーションドメインの作成や、メモリからのアンロードなどを行うメソッドが用意されています。

FriendlyName プロパティを使用すると、拡張子を含むファイル名(例:Application.exe)が取得できます。

コード例

using System;

namespace DemoApplication {
    public class Program {
        public static void Main() {
            string currentExecutable =
                System.AppDomain.CurrentDomain.FriendlyName;
            Console.WriteLine($"Current Executable Name: {currentExecutable}");
            Console.ReadLine();
        }
    }
}

出力結果

Current Executable Name: MyConsoleApp.exe

System.Diagnostics.Process を使う方法

プロセスはオペレーティングシステムにおける概念であり、Windows OSが提供する最小単位の隔離領域です。アプリケーションを実行すると、Windowsはそのアプリケーションに対して固有のプロセスIDや各種属性を持つプロセスを作成し、必要なメモリとリソース一式を割り当てます。

すべてのWindowsプロセスには、アプリケーションの実行を担う少なくとも1つのスレッドが含まれています。プロセスは複数のスレッドを持つことができ、マルチスレッド化によって実行速度や応答性を向上させることができますが、実行の主スレッドが1つだけのプロセスの方が、スレッドセーフの観点ではより安全であるとされています。

ProcessName を使う(拡張子なしの名前を取得)

ProcessName プロパティは、拡張子を含まないファイル名(例:Application)を返します。

コード例1

using System;

namespace DemoApplication {
    public class Program {
        public static void Main() {
            string currentExecutable =
                System.Diagnostics.Process.GetCurrentProcess().ProcessName;
            Console.WriteLine($"Current Executable Name: {currentExecutable}");
            Console.ReadLine();
        }
    }
}

出力結果

Current Executable Name: MyConsoleApp

MainModule.FileName を使う(フルパスを取得)

コード例2

using System;

namespace DemoApplication {
    public class Program {
        public static void Main() {
            string currentExecutable =
                System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
            Console.WriteLine($"Current Executable Name: {currentExecutable}");
            Console.ReadLine();
        }
    }
}

出力結果

Current Executable Name:
C:\Users\UserName\source\repos\MyConsoleApp\MyConsoleApp\bin\Debug\MyConsoleApp.exe

上記の例のように、Process.GetCurrentProcess().MainModule.FileName は、フォルダパスを含む実行ファイルの完全なパスを返します。

まとめ:3つの方法の使い分け

方法取得できる値出力例
AppDomain.CurrentDomain.FriendlyName拡張子ありのファイル名MyConsoleApp.exe
Process.GetCurrentProcess().ProcessName拡張子なしのファイル名MyConsoleApp
Process.GetCurrentProcess().MainModule.FileNameフルパス付きのファイル名C:\...\MyConsoleApp.exe

ファイル名だけが必要な場合は FriendlyNameProcessName、ログ出力などで場所も特定したい場合は MainModule.FileName を使用するとよいでしょう。なお、MainModule へのアクセスは権限によって例外が発生する場合があるため、必要に応じてエラーハンドリングを追加することをおすすめします。

  1. 【Android】現在のスレッド名を取得して表示する方法をわかりやすく解説

    スレッドとは? まず、スレッドについて簡単におさらいしておきましょう。スレッドとは軽量なサブプロセスのことで、UI(ユーザーインターフェース)の動作を妨げることなくバックグラウンド処理を実行するために使われます。Androidアプリ開発では、時間のかかる処理を別スレッドに分離することで、画面のフリーズやANR(Application Not Responding)エラーを防ぐことができます。 本記事では、Androidアプリで現在実行中のスレッドの名前を取得して表示する方法を、サンプルコード付きで解説します。 手順1:新規プロジェクトを作成する Android Studioを起動し、メニューか

  2. Androidで端末の現在の言語を取得する方法をわかりやすく解説

    Androidアプリを多言語対応(国際化)させる際には、端末に設定されている現在の言語を把握しておくことが重要です。本記事では、Localeクラスを使用してAndroid端末の現在の言語と国名を取得する方法を、サンプルコード付きで段階的に解説します。 全体の流れ 今回作成するのは、ボタンをタップすると端末の言語名と国名がTextViewに表示されるシンプルなアプリです。実装の手順は以下の3ステップです。 Android Studioで新規プロジェクトを作成する レイアウトファイル(activity_main.xml)にUIを定義する MainActivity.javaにロジックを実装する