none
como abrir e fechar processo

    Pergunta

  • Queria saber como faço para fechar um processo,ao qual eu sei o nome do processo.

    Outro,seria como abrir um executavel,sabendo que o diretorio estaria armazenado numa variavel

    nota: como fazer isso em VB
    • Editado ElHomem quarta-feira, 1 de janeiro de 2014 01:21
    quarta-feira, 1 de janeiro de 2014 01:06

Respostas

  • Exemplo Simples:

    Try
                Dim ProcessoNome As String = "notepad++"
                Dim Processos() As Process = Diagnostics.Process.GetProcessesByName(ProcessoNome)
                If (Not IsNothing(Processos) AndAlso Processos.Length > 0) Then
                    For Each Processo As Process In Processos
                        Processo.Kill() 'fecha o programa
                    Next
                End If
            Catch ex As System.ComponentModel.Win32Exception
                MessageBox.Show(ex.Message, "Help ?", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

    Exemplo com Tela:

    Código Completo: desse Form3

    Imports System.ComponentModel
    Public Class Form3
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            DataGridView1.ShowCellErrors = False
            DataGridView1.ShowCellToolTips = False
            DataGridView1.ShowRowErrors = False
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
            Carregar_Grid()
        End Sub
        Private Sub Carregar_Grid()
            Dim ListProcess As IList(Of Process) = Diagnostics.Process.GetProcesses().ToList()
            DataGridView1.DataSource = ListProcess.OrderBy(Function(a) a.ProcessName).Select(Function(se) New With {se.Id, se.ProcessName}).ToArray()
        End Sub
        Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
            Try
                If DataGridView1.Rows.Count > 0 AndAlso e.ColumnIndex > -1 AndAlso e.RowIndex > -1 Then
                    Dim Numero As Integer
                    If (Integer.TryParse(DataGridView1.CurrentRow.Cells(0).Value.ToString(), Numero)) Then
                        Dim Proccesso As Process = Diagnostics.Process.GetProcessById(Numero)
                        If (vbYes = MessageBox.Show(String.Format("Deseja fechar esse Processo: ", Proccesso.ProcessName), "Processo ...", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) Then
                            Proccesso.Kill()
                            Carregar_Grid()
                        End If
                        If (Not IsNothing(Proccesso)) Then
                            Proccesso.Dispose()
                        End If
                    End If
                End If
            Catch ex As Win32Exception
                MessageBox.Show(ex.Message, "Help ?", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End Sub
    End Class

    OBS: se ele cair no Try Catch ele pode dar acesso negado alguns processos que você não tenha permissão!!!

    Abrir um Executavel é até mais simples:

    Dim CaminhoNomeAbrir As String = "d:\aplicativo.exe"
    System.Diagnostics.Process.Start(CaminhoNomeAbrir)


    Fulvio Cezar Canducci Dias

    quarta-feira, 1 de janeiro de 2014 13:17

Todas as Respostas

  • Exemplo Simples:

    Try
                Dim ProcessoNome As String = "notepad++"
                Dim Processos() As Process = Diagnostics.Process.GetProcessesByName(ProcessoNome)
                If (Not IsNothing(Processos) AndAlso Processos.Length > 0) Then
                    For Each Processo As Process In Processos
                        Processo.Kill() 'fecha o programa
                    Next
                End If
            Catch ex As System.ComponentModel.Win32Exception
                MessageBox.Show(ex.Message, "Help ?", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try

    Exemplo com Tela:

    Código Completo: desse Form3

    Imports System.ComponentModel
    Public Class Form3
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            DataGridView1.ShowCellErrors = False
            DataGridView1.ShowCellToolTips = False
            DataGridView1.ShowRowErrors = False
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
            Carregar_Grid()
        End Sub
        Private Sub Carregar_Grid()
            Dim ListProcess As IList(Of Process) = Diagnostics.Process.GetProcesses().ToList()
            DataGridView1.DataSource = ListProcess.OrderBy(Function(a) a.ProcessName).Select(Function(se) New With {se.Id, se.ProcessName}).ToArray()
        End Sub
        Private Sub DataGridView1_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
            Try
                If DataGridView1.Rows.Count > 0 AndAlso e.ColumnIndex > -1 AndAlso e.RowIndex > -1 Then
                    Dim Numero As Integer
                    If (Integer.TryParse(DataGridView1.CurrentRow.Cells(0).Value.ToString(), Numero)) Then
                        Dim Proccesso As Process = Diagnostics.Process.GetProcessById(Numero)
                        If (vbYes = MessageBox.Show(String.Format("Deseja fechar esse Processo: ", Proccesso.ProcessName), "Processo ...", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) Then
                            Proccesso.Kill()
                            Carregar_Grid()
                        End If
                        If (Not IsNothing(Proccesso)) Then
                            Proccesso.Dispose()
                        End If
                    End If
                End If
            Catch ex As Win32Exception
                MessageBox.Show(ex.Message, "Help ?", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        End Sub
    End Class

    OBS: se ele cair no Try Catch ele pode dar acesso negado alguns processos que você não tenha permissão!!!

    Abrir um Executavel é até mais simples:

    Dim CaminhoNomeAbrir As String = "d:\aplicativo.exe"
    System.Diagnostics.Process.Start(CaminhoNomeAbrir)


    Fulvio Cezar Canducci Dias

    quarta-feira, 1 de janeiro de 2014 13:17
  • obrigado pela ajuda,o codigo de fechar a aplicação funcionou perfeitamente,quanto ao entrar na aplicação,não pretendia esse.

    Usei este 

    System.Diagnostics.Process.Start("samp://127.0.0.1")

    O codigo conecta ao servidor que está hospedado no meu servidor,porem aparece sempre um aviso,com as opções de entrar,cancelar e add aos favoritos e eu queria somente que ele entrasse logo e não avissase,lembro que a janela aparece não é do programa VB,mas sim já do programa samp

    quinta-feira, 2 de janeiro de 2014 14:12
  • obrigado pela ajuda,o codigo de fechar a aplicação funcionou perfeitamente,quanto ao entrar na aplicação,não pretendia esse.

    Usei este 

    System.Diagnostics.Process.Start("samp://127.0.0.1")

    O codigo conecta ao servidor que está hospedado no meu servidor,porem aparece sempre um aviso,com as opções de entrar,cancelar e add aos favoritos e eu queria somente que ele entrasse logo e não avissase,lembro que a janela aparece não é do programa VB,mas sim já do programa samp

    Verifique se tem argumentos necessários para que não aparece isso e se sim:

    System.Diagnostics.Process.Start("samp://127.0.0.1", argumentos)
    Mais ai já é com o pessoal desse sistema!


    Fulvio Cezar Canducci Dias

    quinta-feira, 2 de janeiro de 2014 14:33