运行进程openfiles将结果输出到文件

时间:2014-09-24 17:12:26

标签: c#

我正在尝试将openfiles进程的结果输出到文件但是我没有得到任何结果可以解释为什么?我尝试了两种不同的方式。如果我使用命令提示符并运行相同的过程,它会向我的文件显示结果。

更新:我添加了第三个更改redirectstandardoutput = true的方法 我试过这个,现在我得到一个文件,但没有结果

更新: 我发现在64位系统上执行此操作时将构建选项设置为x86的问题我认为它运行的是32位版本的openfiles。我通过运行我的应用程序并使用RedirectStandardError流进行测试,我本来应该在第一时间做这个:)这就是它所说的“错误:目标系统必须运行32位操作系统。”

//First Method
using (Process proc = new Process())
{
  proc.StartInfo.UseShellExecute = false;
  proc.StartInfo.CreateNoWindow = true;
  proc.StartInfo.FileName = "openfiles";
  proc.StartInfo.Arguments = "/query /FO CSV /v > " + "\"" + Application.StartupPath + @"\OpenFiles.log" + "\"";
  proc.Start();
}

//Second method
using (Process proc = new Process())
{
   proc.StartInfo.UseShellExecute = false;
   proc.StartInfo.CreateNoWindow = true;
   proc.StartInfo.FileName = "cmd";
   proc.StartInfo.Arguments = "/C openfiles /query /FO CSV /v > " + "\"" + Application.StartupPath + @"\OpenFiles.log" + "\"";
   proc.Start();
 }

//Third method
using (Process proc = new Process())
{
   proc.StartInfo.UseShellExecute = false;
   proc.StartInfo.CreateNoWindow = true;
   proc.StartInfo.RedirectStandardOutput = true;
   proc.StartInfo.FileName = "openfiles";
   proc.StartInfo.Arguments = "/query /FO CSV /v";
   proc.Start();
   string output = proc.StandardOutput.ReadToEnd();
   proc.WaitForExit();
   if (output != null)
   File.WriteAllText(Path.Combine(Application.StartupPath, "OpenFiles.log"), output);
 }

1 个答案:

答案 0 :(得分:0)

重定向不会像> filename那样被视为'参数'。

通常,您将捕获应用程序中的输出并自行将其写入文件:

proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();

File.WriteAllText(Path.Combine(Application.StartupPath, "OpenFiles.log"), output);