更新 - 我的代码现在看起来像这样,并且文件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中看不到查询错误,但在此处或消息框中看不到输出
答案 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