0

このサイトで見つけたいくつかのコードは、ほとんどの場合うまく機能するようです。

コードは次のとおりです。

 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 という単語でコンパイル エラーが発生します。このコードを使用してもかまいませんが、機能させることはできません

誰でも私を助けることができますか?

ありがとう

4

1 に答える 1

1
  1. translate.google.comはあなたの友達です。
  2. 翻訳から、未解決の以前の呼び出しが進行中であるように見えます。
  3. ManagementObjectSearcher は IDisposable を実装しているので、次のように Using ブロックを使用して作成 (および破棄) します。

    Searcher を New ManagementObjectSearcher(query) として使用 [...] 使用終了

これにより、管理されていないリソースへの参照があるため、サーチャーが適切に破棄されるようになります。(以前の検索者が周りにいると、問題が発生する可能性があります。)

于 2012-12-07T21:34:59.800 に答える