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.
Puede usar Environment.GetCommandLineArgs()
para obtener los argumentos y Environment.CommandLine
para obtener la línea de comando real tal como se ingresó.
Además, puede usar Assembly.GetEntryAssembly()
o Process.GetCurrentProcess()
.
Sin embargo, al realizar la depuración, debe tener cuidado, ya que este último ejemplo puede dar el nombre del ejecutable de su depurador (dependiendo de cómo adjunte el depurador) en lugar de su ejecutable, como lo pueden hacer los otros ejemplos.
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.