Beruflich Dokumente
Kultur Dokumente
name=News&file=article&sid=588
1 de 15
Inicio
Buscar
Contactar
Cookies
Descargas
Foros
Historia
Nosotros
Proponer
Temas
Top 10
Trucos
Tutoriales
Usuario
Wiki
Nick
Contrasea
Iniciar
Nuevo
usuario
English
Programacin: Cmo desarrollar una aplicacin de servicio en Windows con Visual Basic .Net
Descargar
Descarga Gratis Prueba de Velocidad Rpido con InternetSpeedTracker!
Explicamos paso a paso en este tutorial cmo realizar un servicio de Windows mediante el lenguaje de programacin Microsoft Visual Basic .Net
de Microsoft Visual Studio .Net. Mostramos cmo desarrollar una aplicacin especial: un servicio de Windows. Dicha aplicacin se integrar
perfectamente en los servicios de Microsoft Windows 7 (o cualquier otro sistema operativo de Microsoft).
podremos ver las propiedades y configuracin para el servicio actual. En la pestaa "General":
Nombre de servicio: nombre con el que se identifica el servicio para tareas internas (iniciarlo o detenerlo desde la lnea de comandos,
etc.).
Nombre para mostrar: nombre que aparece en la columna "Nombre" de la ventana de servicios.
Descripcin: descripcin larga de lo que hace el servicio o la empresa que lo ha desarrollado.
Ruta de acceso al ejecutable: carpeta y fichero ejecutable (aplicacin) del servicio.
Tipo de inicio: modo en el que arrancar el servicio: Automtico (inicio retrasado), Automtico, Manual Deshabilitado.
Estado del servicio: estado actual del servicio: Iniciado, Detenido, Pausado.
Con los botones "Iniciar", "Detener", "Pausar", "Reanudar" se podr cambiar el estado del servicio.
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
2 de 15
En la pestaa "Iniciar sesin": desde esta pestaa podremos configurar las opciones de seguridad, indicando con qu usuario del equipo o del
dominio (si el equipo pertenece a un dominio Windows). Si el servicio requiere de interactuacin con el usuario (aunque no es lo habitual)
podremos marcar la opcin "Permitir que el servicio interacte con el escritorio":
En la pestaa "Recuperacin" podremos configurar las acciones a realizar en caso de que se produzca algn error en la ejecucin del servicio:
qu hacer si se produce el primer error, el segundo, si se producen ms errores:
En la pestaa "Dependencias" se mostrar si el inicio de un servicio depende de que otros servicios estn iniciados. De ser as, antes de iniciar el
servicio los servicios de los que depende deben estar iniciados. Tambin ocurre a la inversa, si otros servicios dependen de ste y lo detenemos,
tambin se detendrn los servicios que dependen de ste:
Normalmente, los servicios iniciados suelen verse en el Administrador de tareas de Windows, desde la pestaa "Procesos":
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
3 de 15
Nota: en el ejemplo que os estamos mostrando, el servicio se llama "Apache2.2" y como se puede observar, el proceso se llama "httpd.exe",
esto es porque el servicio "Apache2.2" en realidad ejecuta el fichero "httpd.exe" (como se puede observar ms atrs en "Ruta de acceso al
ejecutable").
Hay que tener en cuenta, si decidimos iniciar, detener o cambiar el modo de inicio de algunos servicios (incluso si los deshabilitamos para
impedir su arranque), que algunos servicios son necesarios para el correcto funcionamiento del sistema operativo, por lo que si cambiamos su
estado puede que ste deje de funcionar correctamente. Por lo que es recomendable no modificar el estado y tipo de inicio de estos servicios.
En el caso de que nuestro equipo vaya "lento" y pueda ser debido a que tenemos muchos servicios de aplicaciones innecesarias en ejecucin,
podremos usar la herramienta "msconfig" (Configuracin del sistema), desde el botn "Iniciar" - escribiendo "msconfig":
En la pestaa "Servicios" de "Configuracin del sistema" podremos deshabilitar los servicios que consideremos que no son necesarios. Marcando
la opcin "Ocultar todos los servicios de Microsoft" no se mostrarn los servicios del sistema operativo, por lo que evitaremos cometer posibles
errores. Hay que tener en cuenta que los servicios que desmarquemos en esta ventana cambiarn el tipo de inicio a "Deshabilitado", por lo que
no podrn ejecutarse ni tan siquiera de forma manual hasta que no volvamos a cambiar el tipo de inicio a Manual o a Automtico. Por ello hay
que proceder con precaucin o algunas aplicaciones dejarn de funcionar:
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
4 de 15
Seleccionaremos "Visual Basic" - "Windows" en la parte izquierda de "Plantillas instaladas", en la parte derecha seleccionaremos "Servicio de
Windows". Introduciremos en nombre el identificador del proyecto, por ejemplo "AjpdSoftServicioEncriptarCarpeta" y pulsaremos "Aceptar":
Nos mostrar la superficie de diseo para el fichero "Service1.vb" que ser el principal de nuestra aplicacin de servicio de Windows:
Pulsando en el "Explorador de soluciones" podremos ver los ficheros que se han creado, renombraremos el fichero "Service1.vb" por el nombre
que queramos, por ejemplo "EncriptarCarpeta.vb":
Agregaremos ahora el componente que nos permitir saber cundo el usuario ha creado un nuevo fichero en la carpeta especificada. Este
componente ser el que "active" nuestra aplicacin para que encripte el nuevo fichero. Para agregar este componente pulsaremos en el Cuadro
de herramientas, en "Componentes" - "FileSystemWatcher" (realiza el seguimiento de las notificaciones de cambio del sistema de archivos y
desencadena eventos cuando cambia un directorio o archivo):
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
5 de 15
Estableceremos ahora las propiedades del servicio que estamos desarrollando. Para ello pulsaremos con el botn derecho sobre la superficie de
diseo y seleccionaremos "Propiedades":
Indicamos tambin a continuacin las propiedades para el componente FileSystemWatcher anteriormente agregado:
Name: nombre identificativo para el componente para uso en el cdigo, por ejemplo "cambioFicheroCarpeta".
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
6 de 15
EnableRaisingEvents: indica si el componente est habilitado, lo pondremosa False para que el componente no provoque sucesos antes
de que se inicie el servicio.
Filter: cadena de filtro utilizada para determinar qu archivos se supervisan en un directorio.
GenerateMember: indica si se generar una variable miembro para este componente.
IncludeSubdirectories: indica si se deben supervisar los subdirectorios de la ruta de acceso especificada.
Modifiers: indica el nivel de visibilidad del objeto.
NotifyFilter: establece el tipo de cambios que se van a inspeccionar.
Path: establece la ruta de acceso del directorio que se va a inspeccionar.
El servicio leer la carpeta que usar para comprimir los archivos de un fichero de configuracin INI. De esta forma el usuario podr indicar qu
carpeta quiere usar. Para ello aadiremos una clase a nuestro proyecto VB.Net que nos permitir leer valores de configuracin de ficheros INI.
Para aadir esta clase pulsaremos en el "Explorador de soluciones", pulsaremos con el botn derecho sobre el proyecto y seleccionaremos
"Agregar" - "Clase":
Copiaremos y pegaremos el cdigo de este enlace (contenido de la clase para trabajar con ficheros INI) en el fichero de clase creado
"LeerEscribirFicherosINI": Funciones para leer y escribir en ficheros INI VB.Net:
Aadiremos ahora el cdigo VB.Net necesario para activar el componente FileSystemWatcher cuando se inicie el servicio, en el evento "OnStart"
del fichero "EncriptarCarpeta.vb":
Protected Overrides Sub OnStart(ByVal args() As String)
Dim carpetaCifrar As String
'Leemos la carpeta a cifrar del fichero INI de configuracin
Dim objFicherosINI As New LeerEscribirFicherosINI(
System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,
"configuracion.ini"))
carpetaCifrar = objFicherosINI.GetString("Configuracin", "Carpeta",
System.AppDomain.CurrentDomain.BaseDirectory)
'Comprobamos que el directorio a encriptar existe
'Si no existe lo creamos
If Not System.IO.Directory.Exists(carpetaCifrar) Then
System.IO.Directory.CreateDirectory(carpetaCifrar)
End If
'Activamos la recepcin de sucesos de archivos
cambioFicheroCarpeta.Path = carpetaCifrar
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
7 de 15
cambioFicheroCarpeta.EnableRaisingEvents = True
End Sub
Aadiremos ahora el cdigo VB.Net necesario para desactivar el componente FileSystemWatcher cuando se detenga el servicio, en el evento
"OnStop" del fichero "EncriptarCarpeta.vb":
Protected Overrides Sub OnStop()
'Detenemos la recepcin de sucesos de archivos
cambioFicheroCarpeta.EnableRaisingEvents = False
End Sub
Introduciremos ahora el cdigo VB.Net necesario para cifrar los ficheros que el usuario vaya creando o copiando a la carpeta establecida en el
fichero de configuracin INI. Por un lado declararemos una variable para establecer la contrasea de cifrado y la extensin de los ficheros
temporales que se crearn para el cifrado:
Public Class EncriptarCarpeta
Dim clavesCifrado() As Byte = {234, 125, 22, 6, 54, 45, 254}
Dim extensionFicherosTMP As String = ".###"
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
8 de 15
Visual Basic .Net aadir un nuevo componente a la aplicacin de servicio llamado ProjectInstaller.vb, en este nuevo componente habr
aadido dos objetos adicionales: ServiceProcessInstaller1 y ServiceInstaller1. Pulsando con el botn derecho del ratn sobre
ServiceInstaller1 y seleccionando "Propiedades" podremos establecer las propiedades para el servicio que se instalar, las ms importantes:
ServiceName: esta propiedad debe coincidir con la propiedad ServiceName de la clase servicio que hemos configurado inicialmente, en
nuestro caso AjpdSoftEncriptarFicheros.
DisplayName: cadena de texto descriptiva del servicio, por ejemplo indicando lo que hace: "Encripta los ficheros de la carpeta indicada en
el fichero de configuracin". Este texto aparecer en el programa complementario MMC denominado Servicios (services.msc).
StartType: tipo de inicio del servicio, las posibilidades son: automtico, manual o deshabilitado. En nuestro caso seleccionaremos
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
9 de 15
"Automatic" para que el servicio se inicie de forma automtica cada vez que arranquemos el equipo.
ServicesDependedOn: si nuestro servicio depende de otros servicios para poder ser iniciado, es decir, si para iniciar nuestro servicio debe
haber otros iniciados los podremos indicar aqu.
Para configurar el contexto de seguridad del servicio pulsaremos con el botn derecho del ratn sobre "ServiceProcessInstaller1",
seleccionaremos "Propiedades". Desde esta ventana de propiedades podremos indicar el tipo de cuenta en "Account" con las posibilidades:
LocalService: cuenta que acta como usuario sin privilegios en el equipo local y presenta credenciales annimas a cualquier servidor
remoto.
NetworkService: cuenta que proporciona amplis privilegios locales y presenta credenciales del equipo a cualquier servidor remoto.
LocalSystem: una cuenta, utilizada por el administrador de control de servicio, que tiene amplios privilegios en el equipo local y funciona
como un equipo de la red.
User: cuenta definida por un usuario especfico en la red. Si se especifica User para el miembro ServiceProcessInstaller.Account, el sistema
pide un nombre de usuario y una contrasea al instalar el servicio, a menos que se establezcan valores para las propiedades Username y
Password de la instancia de ServiceProcessInstaller.
Si no hay errores de compilacin VB.Net habr creado el fichero ejecutable de nuestro servicio Windows en la carpeta bin del proyecto:
Crearemos el fichero de configuracin INI para indicar la carpeta a encritar, para ello abriremos el notepad (bloc de notas) de Windows o
cualquier otro editor de texto plano y escribiremos el siguiente contenido:
[Configuracin]
Carpeta=C:/encriptar
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
10 de 15
Guardaremos el fichero con el nombre "configuracion.ini" en la misma carpeta que el ejecutable del servicio:
Copiaremos el ejecutable AjpdSoftServicioEncriptarCarpeta.exe y el fichero configuracion.ini a una carpeta de la unidad C para facilitar la
instalacin del servicio (para evitar rutas largas). Por ejemplo los copiaremos a la carpeta:
C:/ServicioEncriptar
Desde la lnea de comandos accederemos a la carpeta donde se encuentra el fichero InstallUtil.exe, con el comando "cd":
cd c:/Windows/Microsoft.NET/Framework/v4.0.30319
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
11 de 15
A continuacin el listado de los mensajes devueltos tras la instalacin del servicio de Windows por InstallUtil:
cd c:/Windows/Microsoft.NET/Framework/v4.0.30319
installutil C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe
Utilidad de instalacin de Microsoft (R) .NET Framework, versin 4.0.30319.1
(C) Microsoft Corporation. Reservados todos los derechos.
Ejecutando una instalacin de transaccin.
Iniciando la fase de instalacin dentro de la instalacin.
Consulte el contenido del archivo de registro sobre el progreso del ensamblado C:/ServicioEncriptar
/AjpdSoftServicioEncriptarCarpeta.exe.
El archivo est ubicado en C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.InstallLog.
Instalando ensamblado 'C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe'.
Los parmetros afectados son:
logtoconsole =
logfile = C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.InstallLog
assemblypath = C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe
Instalando el servicio AjpdSoftEncriptarFicheros...
El servicio AjpdSoftEncriptarFicheros se ha instalado correctamente.
Creando el origen de EventLog AjpdSoftEncriptarFicheros en el registro Application...
La fase de instalacin finaliz correctamente y la fase de confirmacin est empezando.
Consulte el contenido del archivo de registro sobre el progreso del ensamblado C:/ServicioEncriptar
/AjpdSoftServicioEncriptarCarpeta.exe.
El archivo est ubicado en C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.InstallLog.
Confirmando ensamblado 'C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe'.
Los parmetros afectados son:
logtoconsole =
logfile = C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.InstallLog
assemblypath = C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe
La fase de confirmacin finaliz correctamente.
La instalacin con transacciones ha finalizado.
Si todo es correcto podremos consultar el servicio en el "Panel de Control" - "Herramientas administrativas" - "Servicios":
Nos aparecer un nuevo servicio con el nombre "AjpdSoft Encriptar Ficheros", inicialmente en estado detenido. Haciendo doble clic sobre l
podremos ver las propiedades:
El nombre del servicio ser: AjpdSoftEncriptarFicheros, el nombre para mostrar: "AjpdSoft Encritpar Ficheros", la descripcin: "Encripta los
ficheros de la carpeta especificada", el tipo de inicio "Automtico". Pulsaremos "Iniciar" para activar la aplicacin de servicio y as poder probarlo:
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
12 de 15
A continuacin el listado de los mensajes devueltos tras la desinstalacin del servicio de Windows por InstallUtil:
installutil C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe /u
Utilidad de instalacin de Microsoft (R) .NET Framework, versin 4.0.30319.1
(C) Microsoft Corporation. Reservados todos los derechos.
Iniciando la desinstalacin.
Consulte el contenido del archivo de registro sobre el progreso del ensamblado C:/ServicioEncriptar
/AjpdSoftServicioEncriptarCarpeta.exe.
El archivo est ubicado en C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.InstallLog.
Desinstalando ensamblado 'C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe'.
Los parmetros afectados son:
logtoconsole =
logfile = C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.InstallLog
assemblypath = C:/ServicioEncriptar/AjpdSoftServicioEncriptarCarpeta.exe
Quitando el origen de EventLog AjpdSoftEncriptarFicheros.
Se est quitando el servicio AjpdSoftEncriptarFicheros del sistema...
El servicio AjpdSoftEncriptarFicheros se ha quitado correctamente del sistema.
La desinstalacin ha finalizado.
Si queremos realizar una depuracin ms a fondo, por ejemplo para saber cundo nuestra aplicacin de servicio encripta un fichero, deberemos
escribir nosotros mismos en el visor de eventos. Para ello aadiremos la siguiente lnea donde y cuando queramos que la aplicacin escriba en el
visor de eventos:
Me.EventLog.WriteEntry("Encriptando fichero...")
Podemos controlar los posibles errores de nuestra aplicacin y guardar el error que se pueda producir en el Visor de eventos. Para ello, en el
cdigo propenso a producir algn error, aadiramos:
Try
...........
Catch ex As Exception
Me.EventLog.WriteEntry("Error al encriptar: " & ex.Message)
End Try
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
13 de 15
Por supuesto, otra opcin para depurar nuestra aplicacin de servicio es escribir los eventos que queramos registrar en un fichero de log (fichero
de texto plano). De esta forma no necesitaremos escribir en el Visor de eventos y ser ms sencillo consultar y depurar posibles errores. Un
procedimiento para escribir en un fichero de log:
Private Sub escribirLog(texto As String)
Dim fichero As New System.IO.StreamWriter("c:\encriptar.log", True)
fichero.WriteLine(Now & Chr(9) & texto)
fichero.Close()
End Sub
3. Aadiremos el siguiente procedimiento para cuando se produzca el evento de apagado del sistema "OnShutdown", en este procedimiento
pondremos el cdigo que queramos que se ejecute cuando se vaya a apagar el equipo:
Protected Overrides Sub OnShutdown()
cambioFicheroCarpeta.EnableRaisingEvents = False
escribirLog("El equipo se est apagando")
End Sub
De la misma forma podremos activar la propiedad "CanHandlePowerEvent" del servicio a True y usaremos el procedimiento "OnPwerEvent" como
se indica a continuacin:
Protected Overrides Function OnPowerEvent(powerStatus As _
System.ServiceProcess.PowerBroadcastStatus) As Boolean
Select Case powerStatus
Case ServiceProcess.PowerBroadcastStatus.Suspend
escribirLog("El equipo se est suspendiendo")
Case ServiceProcess.PowerBroadcastStatus.ResumeSuspend
escribirLog("El equipo se est saliendo del modo suspensin")
Case ServiceProcess.PowerBroadcastStatus.BatteryLow
escribirLog("El equipo tiene la batera baja")
End Select
Return True
End Function
Anexo
Cdigo fuente o source code del servicio de ejemplo de este artculo
Public Class EncriptarCarpeta
Dim clavesCifrado() As Byte = {234, 125, 22, 6, 54, 45, 254}
Dim extensionFicherosTMP As String = ".###"
Protected Overrides Sub OnShutdown()
cambioFicheroCarpeta.EnableRaisingEvents = False
escribirLog("El equipo se est apagando")
End Sub
Protected Overrides Function OnPowerEvent(powerStatus As _
System.ServiceProcess.PowerBroadcastStatus) As Boolean
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
14 de 15
15/07/2015 22:44
Cmo desarrollar una aplicacin de servicio en Windows con Visual B... http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=588
15 de 15
Artculos relacionados
Cmo desarrollar un servicio de Windows con Borland Delphi.
Generar y leer cdigos QR Quick Response Barcode con Visual Basic .Net VB.Net.
Socket Visual Basic .Net, conexin mediante socket VB.Net y System.Net.Sockets.
Desarrollar aplicacin VB.Net con componentes enlazados a MySQL de forma nativa.
El control de errores en Visual Basic .Net.
Cmo capturar errores genricos excepciones en Borland Codegear Delphi.
AjpdSoft Generador y Lector cdigos QR VB.Net.
AjpdSoft Socket VB.Net.
AjpdSoft Envo SMS Visual Basic .Net.
AjpdSoft Insertar Evento Google Calendar.
AjpdSoft Envo EMail SSL VB.Net.
AjpdSoft Conexin BD Visual Basic .Net.
AjpdSoft Ejecutar comando MS-DOS y capturar la salida.
Foro del Proyecto AjpdSoft sobre Visual Basic, Visual Studio .Net, VB.Net.
Cdigo fuente gratuito de aplicaciones completas en Delphi y Visual Basic.
Foro del Proyecto AjpdSoft sobre las aplicaciones de AjpdSoft (dudas, errores, sugerencias).
Crditos
Artculo realizado ntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.
Artculo en ingls.
Anuncios
15/07/2015 22:44