C# Cmd进程不接受命令?
我试图用以下参数读取命令的输出C# Cmd进程不接受命令?,c#,cmd,C#,Cmd,我试图用以下参数读取命令的输出 ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe"); processStartInfo.Arguments = "nvidia-smi --query-gpu=utilization.memory --format=csv"; processStartInfo.UseShellExecute = false; processStartInfo.RedirectStandardOut
ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
processStartInfo.Arguments = "nvidia-smi --query-gpu=utilization.memory --format=csv";
processStartInfo.UseShellExecute = false;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.CreateNoWindow = true;
Debug.Write("Test1 \n"); // it prints
Process process = Process.Start(processStartInfo);
using (StreamReader streamReader = process.StandardOutput)
{
Debug.Write("Test2 \n"); // it prints
output = streamReader.ReadToEnd();
Debug.Write("Test3 \n"); // it doesn t print
}
String[] substrings = output.Split(delimiter2);
我应该指出,如果我手动运行该命令,它是有效的。以下是您需要的:
ProcessStartInfo processStartInfo = new ProcessStartInfo("nvidia-smi");
processStartInfo.Arguments = "--query-gpu=utilization.memory --format=csv";
processStartInfo.UseShellExecute = false;
首先-cmd.exe不是要启动的二进制文件,因为它没有nvidia命令行参数。你真的想发布-nvidia smi
如果您的PATH变量中没有nvidia smi,您可能会遇到诸如“未找到文件”之类的异常。在这种情况下,您必须使用二进制文件的完整路径
更新日期:25/02/2020
以下是我的作品:
还要注意,我的编译目标是64位:
如果手动运行,则无效,您只能手动运行一半的命令。键入
cmd/?
。另外,没有理由首先使用CMD。@如果我将参数更改为processStartInfo.Arguments=“CMD/C nvidia smi--query gpu=utilization.memory--format=csv”,请标记代码>我得到“'nvidia smi'未被识别为内部或外部命令、可操作程序或批处理文件。”您能更具体地说明我应该更改什么,以便它返回我在将参数直接运行到cmd时得到的输出吗?您没有理解mark的意思不确定这是否是您的意思,但我更新了这一行,如下所示ProcessStartInfo ProcessStartInfo=new ProcessStartInfo(@“C:\Windows\System32\nvidia smi”)代码>。现在,在尝试启动进程时,我在System.dll中遇到了这个错误“异常抛出:'System.ComponentModel.Win32Exception'。这是因为nvidia smi是一个64位二进制文件。将项目更改为构建为x64,而不是任何CPU。在构建为x64时,我会遇到完全相同的错误。你能帮我吗?试着在二进制名称中添加.exe