我试图获取输出以显示我的计算机上当前打开的文档,但无论如何它都会返回 NULL。
StringCollection values = new StringCollection();
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "openfiles.exe",
Arguments = "/query /FO CSV /v",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
while (!proc.StandardOutput.EndOfStream)
{
string line = proc.StandardOutput.ReadLine();
values.Add(line);
}
foreach (string sline in values)
MessageBox.Show(sline);
Edit:
在进一步审查期间,我发现我遇到了异常问题。在我的诊断运行期间,我得到以下信息:
Proc.BasePriority 引发 System.InvalidOperationException 类型的异常
Edit:
尝试将代码拉取为:
string val = proc.StandardOutput.ReadToEnd();
MessageBox.Show(val);
返回时也是 NULL 值,即使在 proc.start(); 之后 Proc 仍然有错误。
您必须读取标准输出和标准错误流。这是因为您无法从同一线程读取它们。
为了实现这一点,你必须使用事件处理程序将在单独的线程上调用。
将代码编译为anycpu
as openfiles
有 32 位和 64 位版本。如果体系结构不匹配,它可能找不到可执行文件。
从错误流中读取的行前面带有 ! > 因此它们在输出中脱颖而出。
StringCollection values = new StringCollection();
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "openfiles.exe",
Arguments = "/query /FO CSV /v",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = false
}
};
proc.Start();
proc.OutputDataReceived += (s,e) => {
lock (values)
{
values.Add(e.Data);
}
};
proc.ErrorDataReceived += (s,e) => {
lock (values)
{
values.Add("! > " + e.Data);
}
};
proc.BeginErrorReadLine();
proc.BeginOutputReadLine();
proc.WaitForExit();
foreach (string sline in values)
MessageBox.Show(sline);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)