Saya ingin mendapatkan nama program yang sedang berjalan, yaitu nama program yang dapat dieksekusi. Di C / C ++ Anda mendapatkannya dariargs[0]
.
c#
command-line
Joakim
sumber
sumber
Jawaban:
sumber
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 keSystem.IO.Path.GetFileName()
atauSystem.IO.Path.GetFileNameWithoutExtension()
untuk mencapai hasil yang sama seperti di atas.sumber
/?
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 menggunakanProcessName
properti untuk mengetahui namanya. Di bawah ini adalah contoh aplikasi konsol.sumber
.../bin/mono
pada * nixes atau.../mono.exe
pada Windows.Ini sudah cukup:
sumber
Environment.GetCommandLineArgs()
merupakan analog C # yang tepatargv
dari C / C ++.Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Ini adalah kode yang berfungsi untuk saya:
Semua contoh di atas memberi saya processName dengan vshost atau nama dll yang berjalan.
sumber
Coba ini:
Ini mengembalikan Anda sebuah
System.Reflection.Assembly
instance yang memiliki semua data yang Anda ingin tahu tentang aplikasi saat ini. Saya pikirLocation
properti itu mungkin mendapatkan apa yang Anda cari secara spesifik.sumber
CodeBase
daripadaLocation
dalam kasus. Fitur salinan bayangan NET aktif. Lihat blogs.msdn.com/suzcook/archive/2003/06/26/…akan memberi Anda FileName dari aplikasi Anda seperti; "MyApplication.exe"
sumber
Mengapa tidak ada yang menyarankan ini, itu sederhana.
sumber
Application.ExecutablePath
's kode sumber .Pasangan lebih banyak opsi:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
sumber
Jika Anda memerlukan nama Program untuk mengatur aturan firewall, gunakan:
Ini akan memastikan bahwa nama tersebut benar ketika melakukan debugging di VisualStudio dan ketika menjalankan aplikasi langsung di windows.
sumber
Ketika tidak pasti atau ragu-ragu, berlari dalam lingkaran, menjerit dan berteriak.
Saya tidak dapat mengklaim telah menguji setiap opsi, tetapi tidak melakukan hal bodoh seperti mengembalikan vhost selama sesi debugging.
sumber
System.Reflection.Assembly.GetEntryAssembly().Location
mengembalikan lokasi nama exe jika perakitan tidak dimuat dari memori.System.Reflection.Assembly.GetEntryAssembly().CodeBase
mengembalikan lokasi sebagai URL.sumber
JIKA Anda mencari informasi path lengkap dari executable Anda, cara yang dapat diandalkan untuk melakukannya adalah dengan menggunakan yang berikut:
Ini menghilangkan masalah dengan perantara dll, vshost, dll.
sumber
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.
sumber
Environment.CommandLine
memberikan jalur absolut, bukan baris perintah yang dimasukkan, setidaknya di Mono / Linux.Apa ini yang kau inginkan:
sumber
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:
sumber
GetEntryAssembly()
dapat mengembalikan nol.Untuk aplikasi windows (formulir dan konsol) saya menggunakan ini:
Tambahkan referensi ke System.Windows.Forms di VS lalu:
Ini berfungsi dengan baik untuk saya apakah saya menjalankan executable aktual atau debugging dalam VS.
Perhatikan bahwa ia mengembalikan nama aplikasi tanpa ekstensi.
John
sumber
Sangat mudah, di sini:
sumber
Ini berfungsi jika Anda hanya perlu nama aplikasi tanpa ekstensi:
sumber
Untuk mendapatkan path dan namanya
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName
sumber