web-dev-qa-db-ja.com

現在の実行ファイルの名前をC#で取得するにはどうすればよいですか。

現在実行中のプログラムの名前、つまりプログラムの実行可能ファイル名を取得したいのですが。 C/C++では、args[0]から取得します。

321
Joakim
System.AppDomain.CurrentDomain.FriendlyName
384
Steven A. Lowe

System.AppDomain.CurrentDomain.FriendlyName - 拡張子付きのファイル名を返します(例:MyApp.exe)。

System.Diagnostics.Process.GetCurrentProcess().ProcessName - ファイル名=なし拡張子を返します(例:MyApp)。

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName - フルパスとファイル名を返します(例:C:\ Examples\Processes\MyApp.exe)。これをSystem.IO.Path.GetFileName()またはSystem.IO.Path.GetFileNameWithoutExtension()に渡して上記と同じ結果を得ることができます。

212
Lee Grissom

System.Diagnostics.Process.GetCurrentProcess()は現在実行中のプロセスを取得します。 ProcessName プロパティを使って名前を把握することができます。以下はコンソールアプリケーションのサンプルです。

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Process.GetCurrentProcess().ProcessName);
        Console.ReadLine();
    }
}
101
Aaron Daniels

これで十分です。

Environment.GetCommandLineArgs()[0];
93
James B

これは私のために働いたコードです:

string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);

上記のすべての例で、processNameにvshostまたは実行中のdll名を付けました。

20
Tal Segal

これを試して:

System.Reflection.Assembly.GetExecutingAssembly()

これにより、現在のアプリケーションについて知りたいすべてのデータを含む System.Reflection.Assembly インスタンスが返されます。私はLocationプロパティがあなたが特にしていたものを手に入れるかもしれないと思います。

18
Andrew Hare

なぜ誰もこれを提案しなかった、それは簡単です。

Path.GetFileName(Application.ExecutablePath)
11
xmen
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

あなたのアプリのFileNameを以下のように指定します。 "MyApplication.exe"

11
Teoman shipahi

その他のオプションをカップル:

  • System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  • Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
10
JohnB

ファイアウォールルールを設定するためにプログラム名が必要な場合は、次のコマンドを使用してください。

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

これにより、VisualStudioでデバッグするときと、Windowsでアプリケーションを直接実行するときの両方で名前が正しいことが保証されます。

8
Mark Uebel
  • アセンブリがメモリからロードされていない場合、System.Reflection.Assembly.GetEntryAssembly().Locationはexe名の場所を返します。
  • System.Reflection.Assembly.GetEntryAssembly().CodeBaseは場所をURLとして返します。
8
langpavel

不確かな、または疑わしい時は、輪になって走り、叫び、叫びなさい。

class Ourself
{
    public static string OurFileName() {
        System.Reflection.Assembly _objParentAssembly;

        if (System.Reflection.Assembly.GetEntryAssembly() == null)
            _objParentAssembly = System.Reflection.Assembly.GetCallingAssembly();
        else
            _objParentAssembly = System.Reflection.Assembly.GetEntryAssembly();

        if (_objParentAssembly.CodeBase.StartsWith("http://"))
            throw new System.IO.IOException("Deployed from URL");

        if (System.IO.File.Exists(_objParentAssembly.Location))
            return _objParentAssembly.Location;
        if (System.IO.File.Exists(System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName))
            return System.AppDomain.CurrentDomain.BaseDirectory + System.AppDomain.CurrentDomain.FriendlyName;
        if (System.IO.File.Exists(System.Reflection.Assembly.GetExecutingAssembly().Location))
            return System.Reflection.Assembly.GetExecutingAssembly().Location;

        throw new System.IO.IOException("Assembly not found");
    }
}

各オプションをテストしたとは言えませんが、デバッグセッション中に仮想ホストを返すようなばかげたことはしません。

7
Orwellophile

あなたの実行可能ファイルのフルパス情報を探しているなら、それをする確実な方法は以下を使うことです:

   var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
                       .FileName.Replace(".vshost", "");

これにより、仲介dll、vshostなどに関する問題が解消されます。

5
theMayer

引数を取得するには Environment.GetCommandLineArgs() を、入力した実際のコマンドラインを取得するには Environment.CommandLine を使用できます。

また、 Assembly.GetEntryAssembly() または Process.GetCurrentProcess() を使用することもできます。

ただし、デバッグ時には、最後の例では他の例のように実行可能ファイルではなくデバッガの実行可能ファイル名(デバッガの接続方法によって異なる)を指定する可能性があるので注意が必要です。

4
Jeff Yates

これは、あなたの望むことですか:

Assembly.GetExecutingAssembly ().Location
2

超簡単、ここ:

Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
2

Windowsアプリ(フォームとコンソール)のために私はこれを使います:

次に、VSにSystem.Windows.Formsへの参照を追加します。

using System.Windows.Forms;
namespace whatever
{
    class Program
    {
        static string ApplicationName = Application.ProductName.ToString();
        static void Main(string[] args)
        {
            ........
        }
    }
}

実際の実行可能ファイルを実行しているかVS内でデバッグしているかにかかわらず、これは私にとっては正しく機能します。

拡張子を付けずにアプリケーション名を返すことに注意してください。

ジョン

1
John

.Net Core(またはMono)では、プロセスを定義するバイナリがMonoまたは.Net Core(dotnet)のランタイムバイナリであり、実際のアプリケーションではない場合、ほとんどの回答は適用されません。 、 これを使って:

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
1
Tobias

Application.ExecutablePathを試してください。

0
Bean

Extensioなしでアプリケーション名だけが必要な場合、これは機能します。

 Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);
0
RJN