获取进程所有者在VB中返回错误

时间:2012-12-07 20:53:01

标签: vb.net process

我有一些我在这个网站上找到的代码似乎在大多数时候都很好用。

以下是代码:

 Private Function GetProcessOwner(processId As Integer) As String
    Try
        Dim query = "Select * From Win32_Process Where ProcessID = " & processId
        Dim searcher = New ManagementObjectSearcher(query)
        Dim processList = searcher.Get()
        For Each obj As ManagementObject In processList
            Dim argList As String() = {String.Empty, String.Empty}
            Dim returnVal = Convert.ToInt32(obj.InvokeMethod("GetOwner", argList))
            If returnVal = 0 Then
                Return argList(1) & "\" & argList(0)
            End If
        Next
    Catch ex As Exception
    End Try

    Return ""
End Function

然而,有时候我得到了这个:

RuntimeCallableWrapper avec l'erreur suivante : Un appel sortant ne peut pas être effectué étant donné que l’application répartit un appel entrant synchrone. (Exception de HRESULT : 0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL)). Cela se produit habituellement car le contexte COM 0x78e910 dans lequel ce RuntimeCallableWrapper a été créé a été déconnecté ou est occupé à autre chose et ne peut pas traiter la transition des contextes. Aucun proxy ne sera utilisé pour traiter la demande sur le composant COM. Cela peut entraîner des dysfonctionnements ou des pertes de données. Pour éviter ce problème, assurez-vous que tous les contextes/cloisonnements/threads COM restent actifs et sont disponibles pour la transition des contextes, tant que l'application n'en a pas terminé avec les RuntimeCallableWrappers qui représentent les composants COM qui s'y trouvent.

用法语,但我不能用自己的语言理解它,所以我无法真正翻译。任何人都可以告诉我,我做错了,该怎么做才能纠正它?

我发现有另一种方法可以让流程所有者(http://www.codeproject.com/Articles/14828/How-To-Get-Process-Owner-ID-and-Current-User-SID),但它在c#中,整个项目都在VB中。另外,当我复制代码时,我会在单词HANDLE上收到编译错误。我不介意使用这个代码,但我不能让它工作

有人能帮助我吗?

Thsnks

1 个答案:

答案 0 :(得分:1)

  1. translate.google.com是你的朋友。
  2. 从翻译中看,您可能会有一个出色的上一次调用。
  3. 当ManagementObjectSearcher实现IDisposable时,我会使用Using块创建(并处理)它,如下所示:

    使用searcher作为新的ManagementObjectSearcher(查询) [...] 结束使用

  4. 这将确保搜索者得到妥善处理,因为它引用了非托管资源。 (之前的搜索者可能是您遇到问题的原因。)