2015-12-22 5 views
0

Я пытаюсь сделать функцию, которая поиска процесса передается в параметре и если существует возвращает истину но она всегда возвращает ложьФункция возвращает истину

Public Function ps_running(ByVal name As String) As Boolean 
    For Each Proc As Process In Process.GetProcesses 
     If Proc.ProcessName.StartsWith(name) AndAlso (name.Length <> 0) Then 
      Return True 
     End If 
    Next 
    Return False 
End Function 

уверен, что это то основное я не хватает, но я могу «т сказать, что Благодаря

+1

Условие 'Proc.ProcessName.StartsWith (name) AndAlso (name.Length <> 0)' никогда не является истинным. –

+0

Переместите тест длины над вашим для каждого цикла. Достаточно только один раз проверить его. Во-вторых, убедитесь, что имя процесса и имя имеют одинаковый корпус. Либо конвертируйте все в нижний регистр, либо попробуйте использовать соответствующий [CulturInfo] (https://msdn.microsoft.com/de-de/library/6k0axhx9%28v=vs.110%29.aspx), чтобы сравнить регистр без учета регистра. – Sascha

+0

даже без проверки длины он возвращает false (чтобы избежать пустых входов) изменить оба ToUpper, то же самое –

ответ

0

Проверить это:

Sub Main() 
    For Each Proc As Process In Process.GetProcesses 
     Console.WriteLine(Proc.ProcessName) 
    Next 

    Console.WriteLine() 

    Dim b As Boolean = ps_running("dwm") 
    Console.WriteLine(b) 

    Console.ReadLine() 
End Sub 

Public Function ps_running(ByVal name As String) As Boolean 
    If (String.IsNullOrEmpty(name)) Then Return False 

    For Each Proc As Process In Process.GetProcesses 
     If Proc.ProcessName.ToUpper.StartsWith(name.ToUpper) Then 
      Return True 
     End If 
    Next 

    Return False 
End Function 

Отредактировано с полным испытанием

+0

То же самое всегда ложно –

+0

Забавно, потому что это прекрасно работает. Я только что редактировал код с полным тестом. – shadow

+0

Можете ли вы предоставить список процессов и более подробный пример? – shadow

Смежные вопросы