現在実行中のプログラムの名前、つまりプログラムの実行可能ファイル名を取得したいのですが。 C/C++では、args[0]
から取得します。
System.AppDomain.CurrentDomain.FriendlyName
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()
に渡して上記と同じ結果を得ることができます。
System.Diagnostics.Process.GetCurrentProcess()
は現在実行中のプロセスを取得します。 ProcessName
プロパティを使って名前を把握することができます。以下はコンソールアプリケーションのサンプルです。
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
これで十分です。
Environment.GetCommandLineArgs()[0];
これは私のために働いたコードです:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
上記のすべての例で、processNameにvshostまたは実行中のdll名を付けました。
これを試して:
System.Reflection.Assembly.GetExecutingAssembly()
これにより、現在のアプリケーションについて知りたいすべてのデータを含む System.Reflection.Assembly
インスタンスが返されます。私はLocation
プロパティがあなたが特にしていたものを手に入れるかもしれないと思います。
なぜ誰もこれを提案しなかった、それは簡単です。
Path.GetFileName(Application.ExecutablePath)
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
あなたのアプリのFileNameを以下のように指定します。 "MyApplication.exe"
その他のオプションをカップル:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
ファイアウォールルールを設定するためにプログラム名が必要な場合は、次のコマンドを使用してください。
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
これにより、VisualStudioでデバッグするときと、Windowsでアプリケーションを直接実行するときの両方で名前が正しいことが保証されます。
System.Reflection.Assembly.GetEntryAssembly().Location
はexe名の場所を返します。System.Reflection.Assembly.GetEntryAssembly().CodeBase
は場所をURLとして返します。不確かな、または疑わしい時は、輪になって走り、叫び、叫びなさい。
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");
}
}
各オプションをテストしたとは言えませんが、デバッグセッション中に仮想ホストを返すようなばかげたことはしません。
あなたの実行可能ファイルのフルパス情報を探しているなら、それをする確実な方法は以下を使うことです:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
これにより、仲介dll、vshostなどに関する問題が解消されます。
引数を取得するには Environment.GetCommandLineArgs()
を、入力した実際のコマンドラインを取得するには Environment.CommandLine
を使用できます。
また、 Assembly.GetEntryAssembly()
または Process.GetCurrentProcess()
を使用することもできます。
ただし、デバッグ時には、最後の例では他の例のように実行可能ファイルではなくデバッガの実行可能ファイル名(デバッガの接続方法によって異なる)を指定する可能性があるので注意が必要です。
これは、あなたの望むことですか:
Assembly.GetExecutingAssembly ().Location
超簡単、ここ:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
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内でデバッグしているかにかかわらず、これは私にとっては正しく機能します。
拡張子を付けずにアプリケーション名を返すことに注意してください。
ジョン
.Net Core(またはMono)では、プロセスを定義するバイナリがMonoまたは.Net Core(dotnet)のランタイムバイナリであり、実際のアプリケーションではない場合、ほとんどの回答は適用されません。 、 これを使って:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
Application.ExecutablePathを試してください。
Extensioなしでアプリケーション名だけが必要な場合、これは機能します。
Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);