2012-06-15 24 views
8

Tôi đang cố gắng tìm hiểu xem một cá thể của một ứng dụng (không phải vb.net) đã chạy chưa - bởi vì tôi sẽ muốn bắt đầu nó nhưng tôi không muốn bắt đầu nó nếu nó đang chạy. Tôi đã tìm thấy giải pháp để kiểm tra xem quy trình có đang chạy hay không:Làm thế nào để tôi có được danh sách các Process Name đang chạy, trong VB.NET?

Dim proc As Integer = Process.GetProcessesByName(ProcessName).GetUpperBound(0) + 1 

và trả về Đúng nếu> = 1 (hoặc chỉ số quy trình).

Vấn đề của tôi là, đây là ứng dụng của bên thứ ba và tên quy trình không chỉ là tên mà còn chứa số phiên bản (mà tôi có thể không biết trong thời gian chạy) và dường như thêm * 32 (có thể là * 64 nếu nó được cài đặt trong x64?).

Tôi cần có danh sách các quy trình đang chạy, theo tên và kiểm tra xem "processname" có phải là chuỗi con của tên không. Nhưng tôi đã không thành công trong việc có được một danh sách các tên, chỉ xử lý id.

Trả lời

7

tôi cần để có được một danh sách các tiến trình đang chạy, theo tên, và kiểm tra xem "ProcessName" là một chuỗi con của tên.

Bạn có thể sử dụng:

Dim procExists as Boolean = Process.GetProcesses().Any(Function(p) p.Name.Contains(processName)) 

này sẽ xem xét thông qua tất cả các quy trình, và thiết lập giá trị procExists True nếu bất kỳ quá trình mà chứaprocessName tồn tại trong quá trình hiện thực. Điều này sẽ xử lý sự tồn tại của số phiên bản chưa biết cũng như *32 có thể xảy ra nếu bạn đang chạy trên một hệ điều hành 64bit (đó là cờ WOW64 nói rằng đó là một quá trình 32bit chạy trên một hệ điều hành 64bit).

+0

Tôi đã cố gắng này, nhưng "Bất kỳ" không hoạt động. Cảm ơn bạn đã giải thích * 32. – Thalia

+0

@emptyheaded Chỉ cần thêm "Import System.Linq" ở đầu tệp của bạn và Mọi tệp sẽ hoạt động. Đó là một phương pháp mở rộng LINQ (http://msdn.microsoft.com/en-us/library/bb534972.aspx) –

+1

@Reed Copsey: Nếu nó không phải là 'p.ProcessName.Contains' thay vì p.Name.Contains? Và tôi không chắc chắn nếu. Bất kỳ là caseIN nhạy cảm. Nếu không một số bổ sung. ToUpper sẽ rất hữu ích để tìm kiếm các processname? – PeterCo

6

Bạn có thể lặp qua các tiến trình đang chạy như thế này:

For Each p As Process In Process.GetProcesses() 
    Debug.WriteLine(p.ProcessName) 
Next 
2

cách khác:

Dim psList() As Process 
    Try 
     psList = Process.GetProcesses() 

     For Each p As Process In psList 
      Console.WriteLine(p.Id.ToString() + " " + p.ProcessName) 
     Next p 

    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
    Console.ReadKey() 
Các vấn đề liên quan