2017-03-24 19 views
1

私は次のコードを使用しているC#のルーティングを検出する必要がありました。QWINSTAをC#で照会

 ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_IP4RouteTable"); 

     foreach (ManagementObject queryObj in searcher.Get()) 
     { 
      string destination = queryObj["Destination"].ToString(); 
      string mask = queryObj["Mask"].ToString(); 
      string metric = queryObj["Metric1"].ToString(); 
      string interfaceIndex = queryObj["InterfaceIndex"].ToString(); 
      string nexthop = queryObj["NextHop"].ToString(); 
      ... 
     } 

ここで、リモートデスクトップセッションをログオフすることはできません。私はqwinstaコマンドでこれを行うことができることを知っていますが、qwinstaの結果を上記のnetstatの解決策のようなC#に得る方法があるのだろうかと思っていました。

答えて

0

私はあなたが特定のサーバー

 ITerminalServicesManager manager = new TerminalServicesManager(); 
     using (ITerminalServer server = manager.GetRemoteServer(serverName)) 
     { 
      server.Open(); 
      foreach (ITerminalServicesSession session in server.GetSessions()) 
      { 
       NTAccount account = session.UserAccount; 
       if (account != null) 
       { 
        if (account.ToString() == username) 
        { 
         Disconnect(serverName, session.SessionId); 
        } 
       } 
      } 
     } 

のセッションIDを取得するために、カシアライブラリを使用することができますし、上記のコードを使用すると、切断のために必要な情報を抽出することができます発見しました。私がlogoffコマンドをC#で呼び出すと、エラーが発生するので、その切断がどのように行われなければならないかはまだ私にとって謎です。 intrestedてそれらのため


* EDIT *

、私はlogoff.exe

[DllImport("wtsapi32.dll", SetLastError = true)] 
    static extern bool WTSLogoffSession(IntPtr hServer, int SessionId, bool bWait); 
    [DllImport("wtsapi32.dll", SetLastError = true)] 
    static extern IntPtr WTSOpenServer([MarshalAs(UnmanagedType.LPStr)] String pServerName); 

    private void Disconnect(string serverName, int sessionId) 
    { 
     IntPtr server = WTSOpenServer(serverName); 
     WTSLogoffSession(server, sessionId, false); 
    } 
を使用せずに、リモートサーバーからコードをログオフへの道を見つけました