Quiero obtener el nombre del programa actualmente en ejecución, ese es el nombre ejecutable del programa. En C / C ++ lo obtienes args[0]
.
Quiero obtener el nombre del programa actualmente en ejecución, ese es el nombre ejecutable del programa. En C / C ++ lo obtienes args[0]
.
Respuestas:
System.AppDomain.CurrentDomain.FriendlyName
System.AppDomain.CurrentDomain.FriendlyName
aplicaciones desplegadas Click-Once. Para nosotros, esto devuelve " DefaultDomain ", y no el nombre exe original.
string file = object_of_type_in_application_assembly.GetType().Assembly.Location; string app = System.IO.Path.GetFileNameWithoutExtension( file );
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 del archivo sin extensión (por ejemplo, MyApp).
System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- Devuelve la ruta completa y el nombre de archivo (por ejemplo, C: \ Ejemplos \ Procesos \ MyApp.exe). Luego puede pasar esto System.IO.Path.GetFileName()
o System.IO.Path.GetFileNameWithoutExtension()
lograr los mismos resultados que los anteriores.
/?
cambio) en el programa, porque usar la extensión y la ruta simplemente lo desordenan innecesariamente.
GetCurrentProcess()
Process.GetCurrentProcess().ProcessName()
devuelve MyApp.vshost para mí.
System.Diagnostics.Process.GetCurrentProcess()
obtiene el proceso actualmente en ejecución. Puede usar la ProcessName
propiedad para descubrir 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();
}
}
.../bin/mono
on * nixes o .../mono.exe
Windows.
Esto debería ser suficiente:
Environment.GetCommandLineArgs()[0];
Environment.GetCommandLineArgs()
es el análogo exacto de C # de argv
C / C ++.
Path.GetFileNameWithoutExtension(Environment.GetCommandLineArgs()[0])
Este es el código que funcionó para mí:
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.
Prueba esto:
System.Reflection.Assembly.GetExecutingAssembly()
Esto le devuelve una System.Reflection.Assembly
instancia que tiene todos los datos que podría desear saber sobre la aplicación actual. Creo que la Location
propiedad podría obtener lo que buscas específicamente.
CodeBase
lugar de Location
en caso de que la función de instantáneas de .NET esté activa. Ver blogs.msdn.com/suzcook/archive/2003/06/26/…
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
le dará el nombre de archivo de su aplicación como; "MyApplication.exe"
Por qué nadie sugirió esto, es simple.
Path.GetFileName(Application.ExecutablePath)
Application.ExecutablePath
el código fuente de .
Un par de opciones más:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
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.
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 probé cada opción, pero no hace nada estúpido como devolver el vhost durante las sesiones de depuración.
System.Reflection.Assembly.GetEntryAssembly().Location
devuelve la ubicación del nombre exe si el ensamblado no se carga desde la memoria.System.Reflection.Assembly.GetEntryAssembly().CodeBase
devuelve la ubicación como URL.SI está buscando la información de ruta completa de su ejecutable, la forma confiable de hacerlo es utilizar lo siguiente:
var executable = System.Diagnostics.Process.GetCurrentProcess().MainModule
.FileName.Replace(".vshost", "");
Esto elimina cualquier problema con dlls intermedios, vshost, etc.
Puede usar Environment.GetCommandLineArgs()
para obtener los argumentos y Environment.CommandLine
obtener la línea de comando real tal como se ingresó.
Además, puedes usar Assembly.GetEntryAssembly()
o Process.GetCurrentProcess()
.
Sin embargo, al depurar, debe tener cuidado, ya que este ejemplo final puede dar el nombre ejecutable de su depurador (dependiendo de cómo adjunte el depurador) en lugar de su ejecutable, como pueden hacerlo los otros ejemplos.
Environment.CommandLine
da la ruta absoluta, no la línea de comando ingresada, al menos en Mono / Linux.
Es esto lo que quieres:
Assembly.GetExecutingAssembly ().Location
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 de tiempo de ejecución de Mono o .Net Core (dotnet) y no la aplicación real que le interesa. En ese caso , utilizar este:
var myName = Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location);
GetEntryAssembly()
puede devolver nulo.
Para las aplicaciones de Windows (formularios y consola), uso esto:
Agregue una referencia a System.Windows.Forms en VS y 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 depurando dentro de VS.
Tenga en cuenta que devuelve el nombre de la aplicación sin la extensión.
Juan
Súper fácil, aquí:
Environment.CurrentDirectory + "\\" + Process.GetCurrentProcess().ProcessName
Para obtener el camino y el nombre
System.Diagnostics.Process.GetCurrentProcess (). MainModule.FileName