Saya ingin mendapatkan nama program yang sedang berjalan, yaitu nama program yang dapat dieksekusi. Di C / C ++ Anda mendapatkannya dariargs[0]
.
Saya ingin mendapatkan nama program yang sedang berjalan, yaitu nama program yang dapat dieksekusi. Di C / C ++ Anda mendapatkannya dariargs[0]
.
Jawaban:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
bawah aplikasi yang dikerahkan Klik-Sekali. Bagi kami, ini mengembalikan " DefaultDomain ", dan bukan nama exe asli.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Mengembalikan nama file dengan ekstensi (mis. MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Mengembalikan nama file tanpa ekstensi (mis. MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Mengembalikan path lengkap dan nama file (mis. C: \ Contoh \ Proses \ MyApp.exe). Anda kemudian dapat meneruskan ini ke System.IO.Path.GetFileName()
atau System.IO.Path.GetFileNameWithoutExtension()
untuk mencapai hasil yang sama seperti di atas.
/?
beralih), karena menggunakan ekstensi dan jalur hanya mengacaukannya secara tidak perlu.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
mengembalikan MyApp.vshost untuk saya.
System.Diagnostics.Process.GetCurrentProcess()
mendapat proses yang sedang berjalan. Anda dapat menggunakan ProcessName
properti untuk mengetahui namanya. Di bawah ini adalah contoh aplikasi konsol.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
pada * nixes atau .../mono.exe
pada Windows.
Ini sudah cukup:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
merupakan analog C # yang tepat argv
dari C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Ini adalah kode yang berfungsi untuk saya:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Semua contoh di atas memberi saya processName dengan vshost atau nama dll yang berjalan.
Coba ini:
System.Reflection.Assembly.GetExecutingAssembly()
Ini mengembalikan Anda sebuah System.Reflection.Assembly
instance yang memiliki semua data yang Anda ingin tahu tentang aplikasi saat ini. Saya pikir Location
properti itu mungkin mendapatkan apa yang Anda cari secara spesifik.
CodeBase
daripada Location
dalam kasus. Fitur salinan bayangan NET aktif. Lihat blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
akan memberi Anda FileName dari aplikasi Anda seperti; "MyApplication.exe"
Mengapa tidak ada yang menyarankan ini, itu sederhana.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
's kode sumber .
Pasangan lebih banyak opsi:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Jika Anda memerlukan nama Program untuk mengatur aturan firewall, gunakan:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Ini akan memastikan bahwa nama tersebut benar ketika melakukan debugging di VisualStudio dan ketika menjalankan aplikasi langsung di windows.
Ketika tidak pasti atau ragu-ragu, berlari dalam lingkaran, menjerit dan berteriak.
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");
}
}
Saya tidak dapat mengklaim telah menguji setiap opsi, tetapi tidak melakukan hal bodoh seperti mengembalikan vhost selama sesi debugging.
System.Reflection.Assembly.GetEntryAssembly().Location
mengembalikan lokasi nama exe jika perakitan tidak dimuat dari memori.System.Reflection.Assembly.GetEntryAssembly().CodeBase
mengembalikan lokasi sebagai URL.JIKA Anda mencari informasi path lengkap dari executable Anda, cara yang dapat diandalkan untuk melakukannya adalah dengan menggunakan yang berikut:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Ini menghilangkan masalah dengan perantara dll, vshost, dll.
Anda dapat menggunakan Environment.GetCommandLineArgs()
untuk mendapatkan argumen danEnvironment.CommandLine
untuk mendapatkan baris perintah yang sebenarnya seperti yang dimasukkan.
Anda juga dapat menggunakan Assembly.GetEntryAssembly()
atauProcess.GetCurrentProcess()
.
Namun, ketika debugging, Anda harus berhati-hati karena contoh terakhir ini dapat memberikan nama yang dapat dieksekusi debugger Anda (tergantung pada bagaimana Anda melampirkan debugger) daripada Anda yang dapat dieksekusi, seperti contoh lainnya.
Environment.CommandLine
memberikan jalur absolut, bukan baris perintah yang dimasukkan, setidaknya di Mono / Linux.
Apa ini yang kau inginkan:
Assembly.GetExecutingAssembly ().Location
Pada .Net Core (atau Mono), sebagian besar jawaban tidak akan berlaku ketika biner yang mendefinisikan prosesnya adalah biner runtime dari Mono atau .Net Core (dotnet) dan bukan aplikasi aktual yang Anda minati. Dalam hal ini , Gunakan ini:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
dapat mengembalikan nol.
Untuk aplikasi windows (formulir dan konsol) saya menggunakan ini:
Tambahkan referensi ke System.Windows.Forms di VS lalu:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Ini berfungsi dengan baik untuk saya apakah saya menjalankan executable aktual atau debugging dalam VS.
Perhatikan bahwa ia mengembalikan nama aplikasi tanpa ekstensi.
John
Sangat mudah, di sini:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Untuk mendapatkan path dan namanya
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName