2015-10-16 294 views
1

我有以下功能旨在識別用戶是誰啓動的特定進程的用戶名:在foreach開始ManagementException被抓:無效類

Private Function GetProcessAssociatedUserID(ByVal processName As String) As String 
    Dim user(1) As String 

    Try 
     Dim query As New SelectQuery(processName) 
     Dim searcher As New System.Management.ManagementObjectSearcher(query) 
     For Each process As ManagementObject In searcher.Get() 
      process.InvokeMethod("GetOwner", CType(user, Object())) 
     Next 
    Catch ex As Exception 

    End Try 

    Return user(0) 

End Function 

然而某處我得到這個「ManagementException被抓:無效的類「異常拋出我的catch塊。我一直在調試,但仍然無法解決問題。任何幫助將非常感激。

+0

您從未真正命名了要使用的WMI類。所以確定,這是錯誤的,你需要Win32_Process。使用[WMI Code Creator實用程序](https://www.microsoft.com/en-us/download/details.aspx?id=8572)來正確使用,您可以嘗試查詢並讓它自動生成你需要的代碼。 –

回答

0

,您可以嘗試完成這樣

Private Function GetProcessAssociatedUserID(ByVal processName As String) As String 
    Dim query = "Select * from Win32_Process Where Name = """ + processName + """" 
    Dim searcher = New ManagementObjectSearcher(query) 
    Dim processList = searcher.Get()  
    For Each mObj As ManagementObject In processList 
     Dim argList As String() = {String.Empty, String.Empty} 
     Dim returnVal = Convert.ToInt32(mObj.InvokeMethod("GetOwner", argList)) 
     If returnVal = 0 Then 
      Return argList(1) + "\\" + argList(0) 
     End If 
    Next 
    Return "" 
End Function 

這個片段可與.NET框架3.5及以上。有關更多詳細信息,請參閱using-managementobjectsearcher-in-systemmanagement-is-getting-compiling-errors