29 de enero de 2013

Cerrar un proceso que se encuentra en memoria

Problema: Durante el desarrollo de mi aplicación, tuve que utilizar varios procesos nativos del Visual Basic 6, algunas ActiveX que eran de tipo dll y otras de tipo exe, y combinarlos me dio dolores de cabeza. Uno de los problemas con los que tuve que lidiar fue el cerrar aplicaciones ActiveX de tipo exe desde mi aplicación punto net.
Solución: La respuesta la encontré utilizando un proceso que se utiliza en VB6 pero que modificándolo un poco funciona perfectamente para mi problema. La solución la encontré aquí: Listar y cerrar procesos de Windows usando WMi

Mi modificación fue apenas mínima, pero la listo aquí de todas formas.

Private Function MatarProceso(ByVal StrNombreProceso As String, _
    Optional ByVal DecirSINO As Boolean = True) As Boolean
        ' Variables para usar Wmi  
        Dim ListaProcesos As Object
        Dim ObjetoWMI As Object
        Dim ProcesoACerrar As Object

        MatarProceso = False

        ObjetoWMI = GetObject("winmgmts:")

        If ObjetoWMI Is DBNull.Value = False Then

            'instanciamos la variable  
            ListaProcesos = ObjetoWMI.InstancesOf("win32_process")

            For Each ProcesoACerrar In ListaProcesos
                If UCase(ProcesoACerrar.Name) = UCase(StrNombreProceso) Then
                    If DecirSINO Then
                        If MsgBox("¿Matar el proceso " & _
                           ProcesoACerrar.Name & vbNewLine & "...¿Está seguro?", _
                                                 vbYesNo + vbCritical) = vbYes Then
                            ProcesoACerrar.Terminate(0)
                            MatarProceso = True
                        End If
                    Else
                        'Matamos el proceso con el método Terminate  
                        ProcesoACerrar.Terminate(0)
                        MatarProceso = True
                    End If
                End If

            Next
        End If

        'Elimina las variables  
        ListaProcesos = Nothing
        ObjetoWMI = Nothing
End Function

No hay comentarios:

Publicar un comentario en la entrada