Archivo

Archive for the ‘Windows’ Category

[How to] Crear un servicio de Windows

junio 22, 2012 Deja un comentario

Buenas,

En una de mis actividades del día tengo que crear un Servicio de Windows que se encargue de depurar algunas tablas en la Base de Datos, y como parte de mi intento por seguir escribiendo en este Blog, aquí les platico como es que hago este servicio.

Lo primero es Crear el Proyecto:

1.- Creamos un proyecto desde Visual Studio, con la plantilla de: “Windows Service”

image

Asignamos el nombre correspondiente. Lo que vemos en el proyecto son dos archivos, uno llamado Service1.cs y el Program.cs.

 

image

Para observar el código de Service1.cs basta con hacer clic derecho en el fondo gris que nos aparece y seleccionar ver código, o bien presionando F7, como se pueden dar cuenta, aquí estás los métodos para iniciar el Servicio y para Detenerlo. Aquí escribiéremos el código que necesitemos para cuando se ejecuten estos eventos.

Bien ahora podemos editar algunas de las propiedades de nuestro servicio como son:

  Nombre Descripción
Propiedad pública AutoLog Indica si los comandos Iniciar, Detener, Pausar y Continuar deben notificarse en el registro de eventos.
Propiedad pública CanHandlePowerEvent Obtiene o establece un valor que indica si el servicio puede controlar notificaciones de los cambios de estado de la alimentación del equipo.
Propiedad pública CanHandleSessionChangeEvent Obtiene o establece un valor que indica si el servicio puede controlar eventos de cambio de sesión recibidos de una sesión de Terminal Server.
Propiedad pública CanPauseAndContinue Obtiene o establece un valor que indica si se puede pausar y reanudar el servicio.
Propiedad protegida CanRaiseEvents Obtiene un valor que indica si el componente puede generar un evento. (Se hereda de Component).
Propiedad pública CanShutdown Obtiene o establece un valor que indica si se debe informar al servicio de que el sistema se está cerrando.
Propiedad pública CanStop Obtiene o establece un valor que indica si puede detenerse el servicio una vez se ha iniciado.
Propiedad pública Container IContainer that contains the Component.’ data-guid="820b3092646429b7ca584d7070fb2741">IContainer that contains the Component.’ data-guid="820b3092646429b7ca584d7070fb2741">Obtiene IContainer que contiene Component. (Se hereda de Component).
Propiedad protegida DesignMode Component is currently in design mode.’ data-guid="92b14b816d9ff2682c4a51ee3ff07f92">Component is currently in design mode.’ data-guid="92b14b816d9ff2682c4a51ee3ff07f92">Obtiene un valor que indica si Component está actualmente en modo de diseño. (Se hereda de Component).
Propiedad pública EventLog Obtiene un registro de eventos que se puede utilizar para escribir la notificación de llamadas de comandos de servicio, como Iniciar y Detener, en el registro de eventos de aplicación.
Propiedad protegida Events Component.’ data-guid="41716543b8cc97b6827325125b214887">Component.’ data-guid="41716543b8cc97b6827325125b214887">Obtiene la lista de controladores de eventos asociados a Component. (Se hereda de Component).
Propiedad pública ExitCode Obtiene o establece el código de salida para el servicio.
Propiedad protegida ServiceHandle Obtiene el identificador del control de servicios para el servicio.
Propiedad pública ServiceName Obtiene o establece el nombre corto utilizado para identificar el servicio en el sistema.
Propiedad pública Site ISite of the Component.’ data-guid="75f8b75e7a6898f869c5d0fb7d4dd047">ISite of the Component.’ data-guid="75f8b75e7a6898f869c5d0fb7d4dd047">Obtiene o establece ISite de Component. (Se hereda de Component).

Por el momento solo editaré el nombre del Servicio, ya que las opciones que trae por defecto sirven para mi propósito.

Para hacer más practico el ejemplo, simularé mi tarea y limpiaré una tabla cada 12 horas, entonces en el método OnStart, coloco el siguiente código:

protected override void OnStart(string[] args)
{
    Timer timer = new Timer { Enabled = true, Interval = 43200000 }; //43200000  son 12 horas
    timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
    timer.Start();
}

Y en el Handler del timer, colocaré mi código:

 

void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    //TODO: Código para limpiar mi tabla
    new ProcesoLimpiar().Ejecutar();
}

Este código se ejecutará en mi caso, cado 12 horas.

2.- Agregar un Instalador.

Ahora para terminar vamos a agregar un instalador a nuestro servicio. Para hacer nos colocamos en modo de diseño de nuestro servicio, clic derecho y Add Installer.

En este punto se  agregará una clase llamada ProjectInstaller.cs, que contiene dos archivos, serviceInstaller1 donde indicaremos el nombre del servicio y el tipo de inicio. Además de el nombre a mostrar y una descripción de lo que hace la aplicación. Estos dos últimos datos serán los que se mostrarán en el listado de servicios de Windows.

Por último, si seleccionamos el otro elemento, serviceProjectInstaller1, podemos seleccionar el tipo de cuenta con la que queremos que se ejecute el servicio.

image

Con esto tenemos listo nuestro servicio de Windows.

3.- Instalación y Desinstalación

Desde la línea de comandos podemos instalar/desinstalar un servicio Windows. El comando InstallUtil.exe se instala automáticamente con Visual Studio y podemos ejecutarlo a través de Visual Studio Command Prompt.

Instalación:

InstallUtil.exe miEjecutable.exe

Desinstalación

InstallUtil.exe /u miEjecutable.exe

 

Listo, esto es todo. Espero que les sea de utilidad.

Technorati Tags: ,,,
Categorías:C#, how to, Tips, Windows

[Windows] Organiza tu Escritorio en 3D con Bump Top

enero 25, 2010 1 comentario

Con todas las caracteristicas que trae windows 7, entre ellas la de mutitouch, aquí una herramienta de terceros que va muy bien con Windows (porque hay que decir que también existe para MAC), y aquí una provadita de lo que pueden hacer

Aqui el sitio oficial para descargarlo 😀

http://bumptop.com/download.php

Technorati Tags: ,,
Categorías:Tools, Windows, Windows 7

[Vista] Problema con explorador de Windows Vista ‘dejo de funcionar’

septiembre 3, 2009 Deja un comentario

Buenas,

Otro post rápido, si les ocurre este problema al dar clic-derecho sobre algún archivo o carpeta en el explorador de Windows y este se queda atorado y no responde, aquí el como solucionarlo. (hasta el momento a mi me funciona).

Bien hay que bajarse una herramienta que nos muestra los programas instalados en nuestra máquina con todas las características aquí el link:

http://www.nirsoft.net/utils/shexview.html

Una vez que lo bajan y ejecutan nos muestra la lista de los programas instalados, lo que yo hice, fue buscar los programas que no perteneces  Microsoft y checar cuales contienen Menú contextual, y los desactive (esto es presionando F7) y listo, con esto el explorador ya no debe de fallar. Se supone que el problema es que esos menús contextuales no son compatibles y causan errores, espero que les sea de utilidad.

Saludos.

[Windows Form] Crear Formularios Circulares

abril 16, 2009 2 comentarios

Dependiendo de muchas necesidades a la hora de trabajar con la interface de Usuario al momento de trabajar con Controles Windows Form, quizá en algún momento tengamos la necesidad de crear un Formulario Circular, Ovalado, etc..

Para poder hacer esto es necesario manipular la propiedad de Region del Formulario que es una instancia de System.Drawing.Region la cual obtiene o establece la región de ventana asociada al control.

Bien lo que tenemos que hacer es crear un path que contiene la figura de Elipse (en nuestro caso ya que podemos crear más formas), para esto podemos crear un método llamado MiRegion() que contiene el siguiente código:

Private Sub MiRegion()
      'La propiedad GraphicsPath representa 
      'una serie de lineas y curvas conectadas.
      Dim miPath As New System.Drawing.Drawing2D.GraphicsPath

      'Esta linea agrega un elipse al grafico
      'usando las propiedades de ancho y alto del From
      miPath.AddEllipse(0, 0, Me.Width, Me.Height)

      'Agregamos el path a una nueva propiedad de Region
      Dim miRegion As New Region(miPath)

      'Por ultimo asignamos nuestra region a la del Formulario
      Me.Region = miRegion

  End Sub

En tiempo de diseño no podemos modificar la región del formulario, por eso es que debemos hacerlo en tiempo de ejecución y para que nuestro método funcione debemos colocarlo en el evento Load de nuestro formulario.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MiRegion()
    End Sub

Ahora si ejecutamos nuestra aplicación de Windows tenemos un resultado como el siguiente:

image

Etiquetas de Technorati: ,,
Categorías:70-526, Windows, Windows Form

[Windows 7] Atajos de teclado en Windows 7 usando la tecla Windows

abril 15, 2009 Deja un comentario

Hay algunos realmente chulos

  • Windows+Inicio: Minimiza todas las ventanas salvo la activa. Es equivalente a pinchar en la ventana activa y agitarla un poco con el ratón.
  • Windows+Barra Espaciadora: Hace todas las ventanas transparentes para dejar ver el escritorio.
  • Windows+D: Minimiza todo y muestra el escritorio. Una segunda pulsación deja todo como estaba. Equivalente a hacer clic en el cuadradito que hay a la derecha del todo de la barra de tareas.
  • Windows+M: Minimiza todas las ventanas.
  • Windows+Flechas:
  • Arriba: Maximiza la ventana. Equivalente a pinchar la ventana y empujarla contra la parte superior del escritorio
  • Abajo: La minimiza, o la restaura si está maximizada
  • Izquierda y Derecha: Engancha la ventana a la izquierda o derecha del escritorio. Equivalente a pinchar la ventana y empujarla contra los laterales del escritorio. Ideal para comparar cosas y lecturas simultáneas
  • Windows+P: Para controlar cómo se comporta el display cuando estamos conectados a un proyector o monitor externo (solo LCD, duplicar, extender y solo proyector).
  • Windows+SHIFT+flechas izq./dcha.: Muy útil cuando tenemos varios monitores. Manda la ventana activa al monitor adyacente.
  • Windows+(+/-): Zoom in/out en vivo. Excelente alternativa/complemento a BGInfo a la hora de hacer demos.
  • Windows+T: Recorrer los elementos abiertos en la barra de tareas. Equivalente a ir poniendo el ratón en cada uno de ellos.
  • Windows+1, Windows+2, etc. Abre una nueva instancia de la aplicación correspondiente según el orden en las que las tengamos ancladas a la barra de tareas.
  • Windows+F: Buscar
  • Windows+E: Explorer
  • Windows+L: Bloquea el equipo
  • Windows+U: Centro de Accesibilidad
  • Windows+Pausa: Abre las propiedades del sistema del Panel de Control
  • Windows+X: Centro de movilidad
  • Windows+TAB: El ya famoso Flip 3D

Y otros que no usan la tecla Windows pero que también pueden ser útiles.

  • SHIFT+Clic en una aplicación anclada a la barra de tareas abre una nueva instancia de dicha aplicación en lugar de simplemente mostrar las que ya estén abiertas.
  • SHIFT+CTRL+Clic en una aplicación, la lanza con permisos elevados.
  • CTRL+Clic en un elemento de la barra de tareas va mostrando sucesivamente todas las ventanas de ese grupo.

Saludos.

Este es una copia si vergüenza de un post que vi en Geeks.ms en el blog de David Nudelman

Etiquetas de Technorati:
Categorías:Tips, Windows, Windows 7

Windows Day – Tecnologías para derribar paredes

febrero 17, 2009 Deja un comentario
Regístrate al Windows Day. Actualización técnica gratuita y online
 

Etiquetas de Technorati: ,,,

[Word] Cerrar todas las instancias de Word en el Sistema

febrero 4, 2009 Deja un comentario

Muchas veces tenemos la necesidad de cerrar o tronar los procesos de un objeto de Office, en este caso de Word. El siguiente ejemplo muestra como hacer.

Imports System.Diagnostics

Module Module1

    Sub Main()
        Dim procs() = Process.GetProcesses
        Dim pr As Process
        For Each pr In procs
            If (pr.ProcessName = "WINWORD") Then
                pr.Kill()
            End If
        Next

    End Sub

End Module

Utilizamos el nombre de espacios Diagnostics, que nos permite obtener los procesos que se están ejecutando en el Sistema. lo que hacemos es obtener un arreglo de dichos procesos para después recorrerlos e identificar cuales son los que queremos tronar. Por ultimo ejecutamos el método Kill el cual detiene inmediatamente el proceso asociado.

Espero que les sea de utilidad, y como se observa en el ejemplo podemos aplicar esto a cualquier proceso, e incluso ejecutar algún otro que no este corriendo.

Saludos.

 

Etiquetas de Technorati: ,,,,