Я хочу отримати ім’я поточно запущеної програми, тобто виконувану назву програми. В C / C ++ ви отримуєте його args[0]
.
Я хочу отримати ім’я поточно запущеної програми, тобто виконувану назву програми. В C / C ++ ви отримуєте його args[0]
.
Відповіді:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
під розгорнутим додатком Click-Once. Для нас це повернення " DefaultDomain ", а не оригінальне ім'я exe.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
System.AppDomain.CurrentDomain.FriendlyName
- Повертає ім'я файлу з розширенням (наприклад, MyApp.exe).
System.Diagnostics.Process.GetCurrentProcess().ProcessName
- Повертає ім'я файлу без розширення (наприклад, MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Повертає повний шлях та ім'я файлу (наприклад, C: \ Examples \ Proces \ MyApp.exe). Потім ви можете передати це System.IO.Path.GetFileName()
або System.IO.Path.GetFileNameWithoutExtension()
досягти тих же результатів, що і вище.
/?
перемикача), оскільки використання розширення та контуру просто захаращує його.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
повертає MyApp.vshost для мене.
System.Diagnostics.Process.GetCurrentProcess()
отримує поточний запущений процес. Ви можете скористатися ProcessName
властивістю, щоб визначити ім'я. Нижче наведено зразок консольного додатка.
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Process.GetCurrentProcess().ProcessName);
Console.ReadLine();
}
}
.../bin/mono
на * nixes або .../mono.exe
в Windows.
Цього має бути достатньо:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
це точний аналог C # argv
від C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Це код, який працював для мене:
string fullName = Assembly.GetEntryAssembly().Location;
string myName = Path.GetFileNameWithoutExtension(fullName);
Усі приклади, наведені вище, дали мені ім'я processName з vshost або запущеним ім'ям dll.
Спробуйте це:
System.Reflection.Assembly.GetExecutingAssembly()
Це повертає вам System.Reflection.Assembly
екземпляр, у якому є всі дані, які ви могли б хотіти знати про поточну програму. Я думаю, що Location
майно може отримати те, що ви конкретно шукаєте.
CodeBase
замість того, Location
якщо активована функція тіньової копії .NET. Дивіться blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
дасть вам ім'я файлу, як-от ваша програма; "MyApplication.exe"
Чому ніхто не запропонував цього, його просто.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
«S вихідний код .
Ще кілька варіантів:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
Якщо вам потрібна назва програми для налаштування правила брандмауера, використовуйте:
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
Це забезпечить правильність імені як при налагодженні у VisualStudio, так і при запуску програми безпосередньо у Windows.
Коли невпевнено чи сумніваєтесь, бігайте по колах, кричіть і кричіть.
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");
}
}
Я не можу претендувати на тестування кожного варіанта, але це не робить нічого дурного, як повернення vhost під час сесій налагодження.
System.Reflection.Assembly.GetEntryAssembly().Location
повертає розташування імені exe, якщо збірка не завантажена з пам'яті.System.Reflection.Assembly.GetEntryAssembly().CodeBase
повертає місцеположення як URL.ЯКЩО ви шукаєте повну інформацію про ваш виконуваний файл, надійним способом цього є використання наступного:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Це усуває будь-які проблеми з посередництвом dll, vshost тощо.
Ви можете використовувати Environment.GetCommandLineArgs()
для отримання аргументів іEnvironment.CommandLine
отримати фактичний командний рядок, як було введено.
Також ви можете використовувати Assembly.GetEntryAssembly()
абоProcess.GetCurrentProcess()
.
Однак під час налагодження слід бути обережним, оскільки цей остаточний приклад може дати ім'я виконавця вашого відладчика (залежно від того, як ви приєднаєте налагоджувач), а не ваш виконуваний файл, як і інші приклади.
Environment.CommandLine
дає абсолютний шлях, а не введений командний рядок, принаймні у Mono / Linux.
Це те, що ти хочеш:
Assembly.GetExecutingAssembly ().Location
Що стосується .Net Core (або Mono), більшість відповідей не застосовуватиметься, коли двійковий файл, що визначає процес, є бінарним файлом виконання Mono або .Net Core (donet), а не вашим фактичним додатком, яке вас цікавить. У цьому випадку , використовуй це:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
може повернути нуль.
Для програм Windows (форми та консолі) я використовую це:
Потім додайте посилання на System.Windows.Forms у VS:
using System.Windows.Forms;
namespace whatever
{
class Program
{
static string ApplicationName = Application.ProductName.ToString();
static void Main(string[] args)
{
........
}
}
}
Це правильно працює для мене, чи запускаю я фактичний виконуваний файл або налагоджую в межах VS.
Зауважте, що він повертає ім'я програми без розширення.
Джон
Супер легко, тут:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Щоб отримати шлях і назву
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName