C#将服务器QUERY发送​​到CMD并读取输出

时间:2015-10-23 15:11:54

标签: c# cmd output citrix

更新 - 我的代码现在看起来像这样,并且文件test.txt在运行后生成,但文件为空,所以我假设命令没有正确发送到CMD:

    static void command()
    {
        string cmd = "/c QUERY session >C:/test.txt";

        Process proc = new Process();

        proc.StartInfo.LoadUserProfile = true;

        proc.StartInfo.FileName = "cmd.exe";
        proc.StartInfo.Arguments = cmd;

        proc.Start();
        proc.WaitForExit();    
    }

有人可以想办法调试这个吗? Visual Studio没有显示任何错误,因此很难分辨出发生了什么。

非常感谢任何帮助!

在浏览StackExchange之后,我最终得到了以下代码,用于打开命令提示符并发送命令:

        string cmd = "/c QUERY user /SERVER: servername.goes.here";
        Process proc = new Process();
        proc.StartInfo.FileName = "cmd.exe";
        proc.StartInfo.Arguments = cmd;
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

        string output = proc.StandardOutput.ReadToEnd();

        MessageBox.Show(output);

        proc.WaitForExit();

使用简单的“notepad.exe”替换服务器查询时,CMD窗口在运行时打开,notepad.exe也是如此。

但是,在发送服务器查询时(这是为了检查哪些用户正在使用特定的Citrix服务器),我在CMD中看到此消息:

  

'QUERY'未被识别为内部或外部命令,可操作   程序或批处理文件。

当我手动将查询键入CMD时,我会看到当前登录到该特定服务器的所有用户的列表。

我希望程序运行SERVER查询,并将输出发送到消息窗口,以便我知道它有效。

非常感谢任何帮助!

非常感谢

我还注意到从cmd String中删除/c时,我在CMD中看不到查询错误,但在此处或消息框中看不到输出

1 个答案:

答案 0 :(得分:1)

' / c'参数的一部分只是意味着运行以下代码。没有它,它将不会执行您正在提供它的代码。您看到的错误消息表示当前环境无法找到QUERY程序。对于"的命令行,请参阅"它必须是OS PATH环境变量的一部分,或者它必须在当前工作目录中。您可以通过执行CD命令(更改目录)将当前工作目录更改为包含QUERY.exe程序的目录。

您可以使用'&'将单个命令传输到同一个/ c开关中。在个别陈述之间。

cmd.exe /c CD "PATH TO TOOLS FOLDER" & QUERY user /SERVER: servername.goes.here

另一种方法是提供QUERY.exe程序的完整路径。

cmd.exe /c "C:\Program Files\Example\Tools\bin\QUERY.exe" user /SERVER: servername.goes.here

Read more about the cmd line switches