Anuncios

Bienvenidos sean a este post, hoy veremos un tema muy particular.

Anuncios

Hace unos dias atras un suscriptor, nowe2018, me hizo una consulta muy interesante sobre lo visto en este post:

Anuncios
Anuncios

En este post vimos como en C# podiamos obtener los argumentos pasados a traves de la linea de comandos pero solamente eso, es decir a diferencia de C o C++ no podiamos obtener el nombre del programa que lo ejecutaba,, me puse a averiguar y pude encontrar una forma muy practica de hacerlo pero esa no era la unica opcion asi que me decidi a armar un post comentando sobre como se puede hacer en sus distintas opciones, comencemos con la primera.

Anuncios

AppDomain

Esta es la primera opcion que tenemos disponible veamos como se aplica en un ejemplo, para ello crearemos un archivo llamado programa.cs y le agregaremos el siguiente codigo:

programa.cs

using System;

public class program
{
	static int Main()
	{
		string programa = AppDomain.CurrentDomain.FriendlyName;
		Console.Write("Nombre del programa: ");
		Console.WriteLine(programa);

		return 0;
	}
}
Anuncios

Este sera el caso mas simple, primero definiremos una variable llamada programa y en este almacenaremos el resultado obtenido de AppDomain y FriendlyName despues las siguiente dos lineas son para mostrar el contenido de la variable programa, compilemos y veamos como es su salida:

C:\Users\tinchicus>programa.exe
Nombre del programa: programa.exe

C:\Users\tinchicus>
Anuncios

Como pueden ver funciono perfectamente pero de todas las opciones es la que posee el inconveniente mas grave, si el programa esta corriendo en una red con dominio nos devolvera el dominio y no el nombre del programa, asi que nos puede servir siempre y cuando no estemos en la condicion anterior, veamos el segundo caso.

Anuncios

ProcessName

Esta opcion puede ser un poco mas precisa pero veamos como funciona mediante un ejemplo, para ello tomemos el archivo anterior y cambiemos su codigo de la siguiente forma:

using System;

public class program
{
	static int Main()
	{
		string p = System.Diagnostics.Process.GetCurrentProcess()
				.ProcessName;
		Console.WriteLine("Nombre del programa: " + p);

		return 0;
	}
}
Anuncios

Es similar a lo visto anteriormente pero en este caso le decimos que tome el nombre del proceso actual, y nuevamente lo muestre en pantalla, si lo compilamos y probamos tendremos la siguiente salida:

C:\Users\tinchicus>programa.exe
Nombre del programa: programa

C:\Users\tinchicus>
Anuncios

En este caso obtuvimos el nombre del proceso no del programa por esto el inconveniente que podemos tener aca es que el nombre del programa no sea igual al del proceso, generando una discordancia, no lo descarten pero al igual que en el caso anterior no es 100% fiable, veamos el ultimo caso.

Anuncios

FileName

Este puede ser la mejor opcion pero para eso veamos como trabaja, para ello tomaremos el archivo anterior y modificaremos su codigo anterior de la siguiente manera:

using System;

public class program
{
	static int Main()
	{
		string p = System.Diagnostics.Process.GetCurrentProcess()
			.MainModule.FileName;
		Console.WriteLine("Nombre del programa: " + p);

		return 0;
	}
}
Anuncios

En este caso solo cambiamos la propiedad que nos devolvera el nombre, aqui seguimos usando a GetCurrentProcess pero observen que ahora le decimos que desde MainModule nos devuelva cual es el nombre del archivo, esto gracias a FileName, luego mostraremos el resultado almacenado en la variable, compilemos y veamos como es la salida:

C:\Users\tinchicus>programa.exe
Nombre del programa: C:\Users\tinchicus\programa.exe

C:\Users\tinchicus>
Anuncios

Como pueden ver nos devolvio el nombre del programa pero con todo el path donde se encuentra ubicado, en caso de necesitar solamente el nombre del programa y no el path completo modiffiquen el codigo anterior de la siguiente manera:

using System;
using System.IO;

public class program
{
	static int Main()
	{
		string p = Path.GetFileName(System.Diagnostics.Process
			.GetCurrentProcess().MainModule.FileName);
		Console.WriteLine("Nombre del programa: " + p);

		return 0;
	}
}
Anuncios

Primero incluimos una nueva libreria para poder acceder al nuevo metodo, en este caso es GetFileName, el cual nos extraera el nombre del archivo de un path informado, esto lo aplicaremos a la instruccion que usamos para obtener el nombre del programa, lo asignamos a la variable y lo mostramos, compilemos y veamos la nueva salida:

C:\Users\tinchicus>programa.exe
Nombre del programa: programa.exe

C:\Users\tinchicus>
Anuncios

Con todo esto comentado, obviamente esta es la mejor opcion porque va directo al hueso pero no quiere decir que este libre de fallas, la primera opcion es mas simple siempre y cuando no estemos en un dominio de red, la segunda opcion no es incorrecta tampoco pero no siempre el nombre del archivo sera igual al del proceso.

Anuncios

En resumen, hoy hemos visto como obtener el nombre del programa desde el codigo, hemos visto las tres opciones posibles, un ejemplo de cada uno de ellos, sus pros y contras, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50