2012-12-07 58 views
0

我有一些代碼,我在這個網站,這似乎極大的大部分時間工作中。獲取進程所有者返回一個錯誤在VB

下面是代碼:

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
  1. translate.google.com是你的朋友。
  2. 從翻譯,它看起來像你可能有一個突出的前一個調用去。
  3. 由於ManagementObjectSearcher實現IDisposable,我會創造(以及處理)有了這樣所以使用塊吧:

    使用搜索作爲新ManagementObjectSearcher(查詢) [...] 結束使用

這將確保搜索妥善處理的,因爲它有非託管資源的引用。 (以前的搜索者左右可能是你的問題的原因。)

+0

事情是,它總是發生,即使我剛剛重新啓動我的電腦。好像別的東西在做。 –