2017-05-31 50 views
-1

我的程序必須使用套接字編程從服務器讀取數據以終止遠程PC中的進程。 在我從套接字連接轉換netstream後,我將該流轉換爲字符串,但我無法殺死進程,因爲輸入字符串未轉換爲字符串。 我很困惑,因爲我能夠使用字符串方法,如.remove(),但是當我將輸入變量傳遞給函數killProcess時,processessess不會被刪除。如何將(字節)數據流轉換爲Vb.net中的字符串

'socket datastream 
If NetStream.DataAvailable Then 
     Dim bytes(TCPClient.ReceiveBufferSize) As Byte 
     Dim input As String 
     NetStream.Read(bytes, 0, CInt(TcpClient.ReceiveBufferSize)) 
     lblConnectStatus.Text = ("Server was disconnected ") 
     input = Encoding.ASCII.GetString(bytes) 

    If input.StartsWith("kill") Then 
     input = input.Remove(0, 4) 
      Try 
       KillProcess(input) 
      Catch ex As Exception 

      End Try 
    End if 
End if 

'kill process function 
'this function works when i write the program name manually eg.:"notepad" 
'but it doesn't work when i pass the parameter pid for the killProcess() function 
Private Sub KillProcess(ByVal pid As String) 
    For Each P As Process In System.Diagnostics.Process.GetProcessesByName(pid) 
     P.Kill() 
    Next 
End Sub 
+1

由於PID是不是叫什麼名字?你需要'Process.GetProcessById()'......我也不太清楚這裏的網絡部分是如何相關的。 :) – CodeCaster

+1

NET可能會試圖告訴你存在問題,但是你正在吞嚥任何異常 – Plutonix

+1

我不知道你在發送什麼,但它很可能是這樣的:'「kill notepad」'對嗎?如果你使用'.Remove(0,4)',結果將會是''notepad''。注意什麼?開始處有一個空間。你可以通過使用'input.Trim()'來擺脫它。 – MrPaulch

回答

-2
Dim p() As Process 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 

    p = Process.GetProcessesByName("taskmgr") 
    If p.Count > 0 Then 
     Dim pList() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcessesByName("notepad") 
     For Each proc As System.Diagnostics.Process In pList 
      proc.Kill() 

     Next 

    End If 
End Sub 
+0

感謝您的幫助。問題解決了。 –

+1

這個答案應該是什麼意思?如果任務管理器正在運行,它將殺死記事本的所有實例。我不明白這是如何回答OP的問題。 – CodeCaster

相關問題