Я хочу отримати ім’я поточно запущеної програми, тобто виконувану назву програми. В 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().NamePath.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