run parser parameter how desde debug compilar c# command-line

parser - execute command c#



¿Cómo obtengo el nombre del ejecutable actual en C#? (20)

Quiero obtener el nombre del programa actualmente en ejecución, que es el nombre del ejecutable del programa. En C / C ++ lo obtienes de args[0] .


Cuando tengas dudas o dudas, corre en círculos, grita y grita.

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"); } }

No puedo afirmar que he probado cada opción, pero no hace nada estúpido como devolver el host virtual durante las sesiones de depuración.


En .Net Core (o Mono), la mayoría de las respuestas no se aplicarán cuando el binario que define el proceso sea el binario en tiempo de ejecución de Mono o .Net Core (dotnet) y no su aplicación real en la que esté interesado. En ese caso , utilizar esta:

var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);


Es esto lo que quieres:

Assembly.GetExecutingAssembly ().Location


Este es el código que me funcionó:

string fullName = Assembly.GetEntryAssembly().Location; string myName = Path.GetFileNameWithoutExtension(fullName);

Todos los ejemplos anteriores me dieron el nombre de proceso con vshost o el nombre de dll en ejecución.


Esto debería ser suficiente:

Environment.GetCommandLineArgs()[0];


Esto funciona si solo necesita el nombre de la aplicación sin extensio:

Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName);


Para aplicaciones de Windows (formularios y consola) uso esto:

Agregue una referencia a System.Windows.Forms en VS luego:

using System.Windows.Forms; namespace whatever { class Program { static string ApplicationName = Application.ProductName.ToString(); static void Main(string[] args) { ........ } } }

Esto funciona correctamente para mí si estoy ejecutando el ejecutable real o la depuración dentro de VS.

Tenga en cuenta que devuelve el nombre de la aplicación sin la extensión.

Juan


Por qué nadie sugirió esto, es simple.

Path.GetFileName(Application.ExecutablePath)


Prueba Application.ExecutablePath


Prueba esto:

System.Reflection.Assembly.GetExecutingAssembly()

Esto le devuelve una instancia de System.Reflection.Assembly que tiene todos los datos que podría desear conocer sobre la aplicación actual. Creo que la propiedad Location podría obtener lo que está buscando específicamente.



Súper fácil, aquí:

Environment.CurrentDirectory + "//" + Process.GetCurrentProcess().ProcessName


Si está buscando la información de ruta completa de su ejecutable, la manera confiable de hacerlo es usar lo siguiente:

var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule .FileName.Replace(".vshost", "");

Esto elimina cualquier problema con las dlls intermedias, vshost, etc.


Si necesita el nombre del programa para configurar una regla de firewall, use:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

Esto asegurará que el nombre sea correcto tanto al depurar en VisualStudio como al ejecutar la aplicación directamente en Windows.


Un par de opciones más:

  • System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
  • Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

System.AppDomain.CurrentDomain.FriendlyName : devuelve el nombre del archivo con la extensión (por ejemplo, MyApp.exe).

System.Diagnostics.Process.GetCurrentProcess().ProcessName : devuelve el nombre de archivo sin extensión (por ejemplo, MyApp).

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName : devuelve la ruta completa y el nombre del archivo (por ejemplo, C: / Illustrations / Processes / MyApp.exe). Luego, puede pasar esto a System.IO.Path.GetFileName() o System.IO.Path.GetFileNameWithoutExtension() para lograr los mismos resultados que los anteriores.


System.Diagnostics.Process.GetCurrentProcess() obtiene el proceso actualmente en ejecución. Puede utilizar la propiedad System.Diagnostics.Process.GetCurrentProcess().ProcessName para averiguar el nombre. A continuación se muestra una aplicación de consola de muestra.

using System; using System.Diagnostics; class Program { static void Main(string[] args) { Console.WriteLine(Process.GetCurrentProcess().ProcessName); Console.ReadLine(); } }


System.AppDomain.CurrentDomain.FriendlyName


System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;

le dará el nombre de archivo de su aplicación como; "MyApplication.exe"


  • System.Reflection.Assembly.GetEntryAssembly().Location devuelve la ubicación del nombre exe si el ensamblaje no se carga desde la memoria.
  • System.Reflection.Assembly.GetEntryAssembly().CodeBase devuelve la ubicación como URL.