Ya pude, pero no funciona

24/11/2004 - 20:16 por Omar Flores | Informe spam
Hola, ya pude instalar mi aplicación del tipo (Windows Service) como un
servicio, pero no hace nada, el código que puse es el mismo que tengo en una
winForm y ahí si funciona.

Explico brevemente lo que hace mi aplicación y anexo código.

Pretendo cerrar aplicaciones a usuarios tales como el Messenger,Yahoo
Messenger, etc. Entonces lo que hago es con un timer
cada 1 segundo estar checando en los procesos (Administrador de Tareas) los
correspondientes a estas aplicaciones y si los encuentra los mata, en mi
caso como estoy haciendo la prueba estoy probando matar el proceso del Word
(WINWORD.EXE) y como mencioné anteriormete el código en una forma si
funciona, pero cuando lo quiero hacer com un Windows Services es aquí donde
no hace nada.


Código correspondiente a la aplicación Windows Service
Imports System.ServiceProcess

Public Class Service1
Inherits System.ServiceProcess.ServiceBase

Protected Overrides Sub OnStart(ByVal args() As String)

Timer.Interval = 1000
Timer.Enabled = True

Dim AppsRunning As Object
Dim myApp As Object
Dim Wnmgts As Object

Wnmgts = GetObject("winmgmts:")

AppsRunning = Wnmgts.InstancesOf("win32_process")
For Each myApp In AppsRunning
If UCase(myApp.Name) = "WINWORD.EXE" Then
'Cerramos la aplicación Word como prueba
myApp.Terminate(0)
End If
Next

AppsRunning = Nothing
Wnmgts = Nothing
myApp = Nothing
End Sub

Protected Overrides Sub OnStop()
Timer.Interval = 1000
Timer.Enabled = False
End Sub

End Class
 

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
25/11/2004 - 04:24 | Informe spam
Te comento que hice la prueba y me funciono sin problemas.

Como hice algunos ajustes, te pego el codigo que probe (yo cierro la
calculadora, en lugar de Word):


Imports System.ServiceProcess

Public Class Service1
Inherits System.ServiceProcess.ServiceBase

#Region " Código generado por el Diseñador de componentes "

Public Sub New()
MyBase.New()
' El Diseñador de componentes requiere esta llamada.
InitializeComponent()
' Agregar cualquier inicialización después de la llamada a
InitializeComponent()
End Sub

'UserService reemplaza a Dispose para limpiar la lista de componentes.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If

MyBase.Dispose(disposing)
End Sub


' El punto de entrada principal para el proceso
<MTAThread()> _
Shared Sub Main()
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
' Se puede ejecutar en el mismo proceso más de un servicio NT. Para
agregar
' otro servicio a este proceso, cambie la siguiente línea a fin de
' crear otro objeto de servicio. Por ejemplo,
'
' ServicesToRun = New System.ServiceProcess.ServiceBase () {New
Service1, New MySecondUserService}
'
ServicesToRun = New System.ServiceProcess.ServiceBase () {New
Service1}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
End Sub


'Requerido por el Diseñador de componentes
Private components As System.ComponentModel.IContainer

'NOTA: el Diseñador de componentes requiere el siguiente procedimiento
'Se puede modificar utilizando el Diseñador de componentes. No lo
modifique
' con el editor de código.
Private WithEvents Timer1 As System.Timers.Timer

<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Me.Timer1 = New System.Timers.Timer
CType(Me.Timer1,
System.ComponentModel.ISupportInitialize).BeginInit()
'
'Timer1
'
Me.Timer1.AutoReset = False
Me.Timer1.Interval = 1000
'
'Service1
'
Me.CanPauseAndContinue = True
Me.ServiceName = "Service1"
CType(Me.Timer1, System.ComponentModel.ISupportInitialize).EndInit()
End Sub

#End Region


Protected Overrides Sub OnStart(ByVal args() As String)
Me.Timer1.Start()
End Sub

Protected Overrides Sub OnStop()
Me.Timer1.Stop()
End Sub

Protected Overrides Sub OnPause()
Me.Timer1.Stop()
End Sub

Protected Overrides Sub OnContinue()
Me.Timer1.Start()
End Sub

Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As
System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
Dim AppsRunning As Object
Dim myApp As Object
Dim Wnmgts As Object

Wnmgts = GetObject("winmgmts:")
AppsRunning = Wnmgts.InstancesOf("win32_process")
For Each myApp In AppsRunning
If UCase(myApp.Name) = "CALC.EXE" Then
myApp.Terminate(0)
End If
Next

AppsRunning = Nothing
Wnmgts = Nothing
myApp = Nothing

Me.Timer1.Start()
End Sub

End Class



Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

Preguntas similares