viernes, 1 de abril de 2011

Obtener la ruta de ejecución de mi programa

Una duda recurrente cuando programamos con C# es cómo obtener el directorio de ejecución del programa, ya sea este una aplicación windows forms o una biblioteca de clases.

Para obtener la carpeta de ejecución podemos recurrir a la clase System.Reflection.Assembly, que nos proporciona información para manejar el programa en ejecución.


Esto podemos hacerlo en tres pasos:
  • Obtener la ruta completa del assembly
  • Convertirla a una ruta entendible por Windows
  • Limpiar el directorio (quitar nombres de fichero, etc)

Vemos el código para estas acciones:



Observaciones:

Con este código podemos crear una función y acceder a ella cuando lo necesitemos.

jueves, 3 de febrero de 2011

Arrancar y detener servicios de Windows con C#

Mediante el uso de la clase ServiceController se puede obtener control sobre un servicio de Windows instalado en el equipo. Esta clase permite comprobar si un servicio está instalado, en qué estado se encuentra (parado, en marcha, etc), y realizar acciones sobre él como pararlo, arrancarlo o mandarle comandos.


Vemos los pasos a realizar:
  • Añadir la referencia System.ServiceProcess al proyecto
  • Crear el objeto ServiceController capturando el servicio deseado
  • Comprobar el estado: ¿Existe el servicio? ¿Está parado/arrancado?
  • Realizar acción sobre el servicio: Parar/Arrancar
  • Esperar el resultado y cerrar el objeto ServiceController

Vemos un ejemplo de cómo detener un servicio:



Vemos ahora un ejemplo de cómo iniciar un servicio:



Comentarios:

Analizando un poco el código de estos dos ejemplos, podemos realizar las siguientes observaciones:
  • Se crea el objeto de control pasandole el nombre del servicio con el que queremos operar
  • Se comprueba el estado del servicio (si se pudo cargar, está parado, etc)
  • Se arranca o para el servicio
  • Se espera a que esté arrancado o parado
  • Se cierra el objeto de control
Tener en cuenta que existen también las funciones y opciones para pausar (Pause) y rearrancar (Continue) servicios, así como para ejecutar comandos (ExecuteCommand) y algunas otras operaciones.
Ver la documentación de la clase ServiceController en la web MSDN

Escribir en el visor de eventos con C#

He aquí un pequeño ejemplo de cómo escribir entradas en el registro de sucesos de Windows en C#:

Los puntos clave son los siguientes:
  • Añadir la referencia de System.Diagnostics al proyecto
  • Comprobar que el origen y la carpeta de log existen, y crearlos en caso contrario
  • Crear el objeto EventLog
  • Asignarle el origen y la carpeta de log
  • Escribir la entrada en el visor de eventos
Implementación:

Mensaje de bienvenida

Nace C# ESP

Bienvenidos a mi rincón de la web dedicado a la programación en C#. Aquí podréis encontrar artículos con trucos y ejemplos para resolver diversas situaciones de programación en este lenguaje. Y todo en castellano ;-)

Espero que os guste. Disfrutad de vuestra y volved pronto!

Un abrazo,
Zeno