none
Encerrar processo pelo diretório do arquivo RRS feed

  • Pergunta

  • Alguém pode me ajudar ? Meu programa sabe onde fica o arquivo, mas ele não sabe o processo, tem algum jeito dele finalizar o processo só sabendo o patch do arquivo?

    Vinicius H.

    sábado, 15 de março de 2014 20:48

Respostas

  • Você pode fazer um loop nos processos,acessando a propriedade Filename da classe MainModule do processo,você pode obter o caminho do processo.

    Dim processos As Process() = Process.GetProcesses()
    
    For Each p As Process in processos
    	
    	MsgBox(p.MainModule.Filename)
    	
    Next

    Esta propriedade contém,além do caminho,o nome do executável.

    ex:
    C:\Windows\notepad.exe

    Então,você deve remover a string após a última barra (\).Pode fazer isso com o método Substring.

    Dim processos As Process() = Process.GetProcesses()
    
    For Each p As Process in processos
    	
    	Dim caminhoTotal As String = p.MainModule.Filename
    	
    	Dim caminho As String = caminhoTotal.Substring(caminhoTotal.LastIndexOf("\"), caminhoTotal.Length)
    	
    	MsgBox(caminho)
    	
    Next

    Agora,você pode realizar uma comparação.

    Dim processos As Process() = Process.GetProcesses()
    
    For Each p As Process in processos
    	
    	Dim caminhoTotal As String = p.MainModule.Filename
    	
    	Dim caminho As String = caminhoTotal.Substring(caminhoTotal.LastIndexOf("\"), caminhoTotal.Length)
    	
    	If caminho = "C:\Windows\" Then
    		
    		p.Kill()
    		
    	End If
    	
    Next

    Que tal com um método?

    Private Sub Bloquear(Byval diretorio As String)
    
    	Dim processos As Process() = Process.GetProcesses()
    
    	For Each p As Process in processos
    		
    		Dim caminhoTotal As String = p.MainModule.Filename
    		
    		Dim caminho As String = caminhoTotal.Substring(caminhoTotal.LastIndexOf("\"), caminhoTotal.Length)
    		
    		If caminho = diretorio Then
    			
    			p.Kill()
    			
    		End If
    		
    	Next
    
    End Sub

    *Fiz de cabeça,qualquer erro de sintaxe ou má funcionamento,avise.
    • Editado Guilherme L. Santos domingo, 16 de março de 2014 00:22
    • Marcado como Resposta Vini.h domingo, 16 de março de 2014 02:38
    domingo, 16 de março de 2014 00:21

Todas as Respostas

  • Você pode fazer um loop nos processos,acessando a propriedade Filename da classe MainModule do processo,você pode obter o caminho do processo.

    Dim processos As Process() = Process.GetProcesses()
    
    For Each p As Process in processos
    	
    	MsgBox(p.MainModule.Filename)
    	
    Next

    Esta propriedade contém,além do caminho,o nome do executável.

    ex:
    C:\Windows\notepad.exe

    Então,você deve remover a string após a última barra (\).Pode fazer isso com o método Substring.

    Dim processos As Process() = Process.GetProcesses()
    
    For Each p As Process in processos
    	
    	Dim caminhoTotal As String = p.MainModule.Filename
    	
    	Dim caminho As String = caminhoTotal.Substring(caminhoTotal.LastIndexOf("\"), caminhoTotal.Length)
    	
    	MsgBox(caminho)
    	
    Next

    Agora,você pode realizar uma comparação.

    Dim processos As Process() = Process.GetProcesses()
    
    For Each p As Process in processos
    	
    	Dim caminhoTotal As String = p.MainModule.Filename
    	
    	Dim caminho As String = caminhoTotal.Substring(caminhoTotal.LastIndexOf("\"), caminhoTotal.Length)
    	
    	If caminho = "C:\Windows\" Then
    		
    		p.Kill()
    		
    	End If
    	
    Next

    Que tal com um método?

    Private Sub Bloquear(Byval diretorio As String)
    
    	Dim processos As Process() = Process.GetProcesses()
    
    	For Each p As Process in processos
    		
    		Dim caminhoTotal As String = p.MainModule.Filename
    		
    		Dim caminho As String = caminhoTotal.Substring(caminhoTotal.LastIndexOf("\"), caminhoTotal.Length)
    		
    		If caminho = diretorio Then
    			
    			p.Kill()
    			
    		End If
    		
    	Next
    
    End Sub

    *Fiz de cabeça,qualquer erro de sintaxe ou má funcionamento,avise.
    • Editado Guilherme L. Santos domingo, 16 de março de 2014 00:22
    • Marcado como Resposta Vini.h domingo, 16 de março de 2014 02:38
    domingo, 16 de março de 2014 00:21
  • Primeiro ele da um erro na parte de transformar o "CaminhoTotal" em "Caminho" --> O índice e o comprimento devem se referir a um local dentro da cadeia de caracteres.

    Depois eu executei a função Bloquear("C:\Exemplo\123.exe")

    ele da esse outro erro: Um processo de 32 bits não pode acessar módulos de um processo de 64 bits.


    Vinicius H.

    domingo, 16 de março de 2014 01:36
  • mas eu consegui fazer oq queria... dando uma ajustada no seu código... Vl

    Vinicius H.

    domingo, 16 de março de 2014 02:38