We help IT Professionals succeed at work.

Is there a better way to get user status on a terminal server in C#?

thomas_eg
thomas_eg asked
on
Medium Priority
592 Views
Last Modified: 2012-05-07
I need to get user status for a specific user on a terminal server in c#.

I can do this by calling query.exe via System.Diagnostics.Process.
And then read/split the last line of the output stream.
As i do in the code example.

I need to use this in a web service, which is running on a different server, and i don't think this is the proper way to do this.

So is there a better way to do this.

public class TSTools
{
    public static TSInfo GetTSInfo(string server, string user)
    {
        Process process = new Process();
 
        process.StartInfo.FileName = "query.exe";
        process.StartInfo.Arguments = "user " + user + " /server:" + server;
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.Start();
 
        string lastLine = null;
        while (!process.StandardOutput.EndOfStream)
        {
            lastLine = process.StandardOutput.ReadLine();
        }
 
        TSInfo tsInfo = new TSInfo();
        if (!string.IsNullOrEmpty(lastLine))
        {
            tsInfo.UserName = lastLine.Substring(0, 22).Trim();
            tsInfo.SessionName = lastLine.Substring(22, 17).Trim();
            tsInfo.SessionID = lastLine.Substring(39, 6).Trim();
            tsInfo.Status = lastLine.Substring(45, 9).Trim();
            tsInfo.IdleTime = lastLine.Substring(54, 10).Trim();
            tsInfo.LogonTime = lastLine.Substring(64).Trim();
        }
        else
        {
            tsInfo.UserName = user;
            tsInfo.SessionName = "";
            tsInfo.SessionID = "";
            tsInfo.Status = "Offline";
            tsInfo.IdleTime = "";
            tsInfo.LogonTime = "";
        }
 
        return tsInfo;
    }
}
 
public class TSInfo
{
    public string UserName { get; set; }
    public string SessionName { get; set; }
    public string SessionID { get; set; }
    public string Status { get; set; }
    public string IdleTime { get; set; }
    public string LogonTime { get; set; }
}

Open in new window

Comment
Watch Question

Dir Internet Svcs
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.