C# 从StandardOutput.ReadToEnd获取整个输出时出现问题

C# 从StandardOutput.ReadToEnd获取整个输出时出现问题,c#,psexec,C#,Psexec,在工作中,我们有大量现场WES09机器在进行控制数据采集。因为我们有数千个这样的系统,升级是一件痛苦的事情。我一直在慢慢开发一个更好的流程,目前正在开发一个C#应用程序来更好地管理这些流程 这些机器正在运行基于文件的写过滤器,其效果是,如果PSEXEC以前没有在机器上运行过,它就不会让它启动。所以我使用WMIC来禁用FBWF 我正在尝试添加一个状态特性,以查看FBWF是否已启用,因为我在WMIC方面并非总是100%成功。无论如何,FBWF在命令窗口中提供状态输出,但它是多行的。似乎当我使用Sta

在工作中,我们有大量现场WES09机器在进行控制数据采集。因为我们有数千个这样的系统,升级是一件痛苦的事情。我一直在慢慢开发一个更好的流程,目前正在开发一个C#应用程序来更好地管理这些流程

这些机器正在运行基于文件的写过滤器,其效果是,如果PSEXEC以前没有在机器上运行过,它就不会让它启动。所以我使用WMIC来禁用FBWF

我正在尝试添加一个状态特性,以查看FBWF是否已启用,因为我在WMIC方面并非总是100%成功。无论如何,FBWF在命令窗口中提供状态输出,但它是多行的。似乎当我使用StandardOutput.ReadToEnd时,它只得到第一行

下面是从PSEXEC检查FBWF状态时的情况:

当我运行我编写的C#应用程序时,输出只得到以下结果:

“\r\nPsExec v2.2-远程执行进程\r\nCopyright(C) 2001-2016 Mark Russinovich\r\n物理国际- www.sysinternals.com\r\n\r\n的基于文件的写入筛选器配置 当前会话:\r\n“

我不知道它为什么停在那里,我无法得到它的其余部分,实际上它是否被启用(当然,这是下一行)

以下是相关代码段,不包括IP/用户/通行证:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"C:\temp\PSTools\PsExec.exe";
p.StartInfo.Arguments = @"\\" + RemotePCName + " -u " + Username + " -p " + Password + " fbwfmgr";

p.Start();

string output = p.StandardOutput.ReadToEnd();
string errormessage = p.StandardError.ReadToEnd();
我认为我的问题可能是换行,但是在PsExec部分和FBWF输出之间似乎有两个,但是我不确定还要尝试什么。我花了几个小时查看了关于获取输出问题的其他评论,但几乎所有评论都认为应用程序会挂起,这不是我现在遇到的问题


提前感谢您的帮助,我正在慢慢学习C#和编程,整个社区都得到了巨大的帮助

死锁是一种明显的可能性,考虑到输出量并假设程序正常结束。所以,试图让你知道不能编写的代码工作是没有多大意义的。您还需要检查错误输出。我检查了错误输出,它只是显示它正在启动fbwfmgr,然后fbwfmgr存在,错误代码为-1,这是正常的,并且与在本地运行它时得到的结果相同。那么,您得到了关于fbwfmgr的错误?这不正是你想要测试的吗?不,我需要知道FBWF是启用还是禁用的,不管怎样,你都会收到相同的“错误”消息。只是关于FBWF是如何开发的,但我无法控制。从我所发现的一切中,找出它的状态的唯一方法是得到我在原始帖子中的图片中的一行,上面写着启用或禁用。