在c#Project中实现外部应用程序“openedFileView”

时间:2010-05-08 11:44:41

标签: c#

我在一个应用程序上工作,我想找出一个进程使用我的文件系统上的哪些文件。

在尝试使用System.Diagnostics.Process类之后,没有得到结果,我想从Nirsoft找到名为OpenedFileView的应用程序。

http://www.nirsoft.net/utils/opened_files_view.html

基本上它完全符合我的要求,但我的项目中存在一些问题。 “OpenedFileView”选项让你开始使用一些参数创建一个包含我想要的所有信息的txt文件。

但是对于我的情况我想实时搜索进程,如果我重复启动应用程序,我的鼠标光标总是有沙漏。

所以在此之后我尝试了一些方法来摆脱它,试着把它放在BackgroundWorker线程中。但这根本没有改变。我还寻找一种方法来强制Process不要退出,并向它发送新的参数,但这也没有用。

那么有没有办法以我想要的方式使用这个应用程序,或者这根本不起作用?

我希望有人能帮助我摆脱这个恼人的鼠标光标沙漏,或者更好地诠释这个应用程序,这样我就可以实时使用它!

非常感谢!

private void start()
{
   _openedFileView = new Process();
   _openedFileView.StartInfo.FileName = "pathToApp\\OpenedFilesView.exe";
   _openedFileView.EnableRaisingEvents = true;
   _openedFileView.Exited += new EventHandler(myProcess_Exited);
   _openedFileView.StartInfo.Arguments = "/scomma pathToOutputFile";
   _openedFileView.Start();
}

private void myProcess_Exited(object sender, System.EventArgs e)
{
   start();
}

1 个答案:

答案 0 :(得分:0)

你必须调整你的“实时”要求。进程可以在启动该程序所需的时间内打开和关闭数百个文件。鉴于您永远无法获得真正准确的文件使用情况,您也可以降低启动程序的速度。一个直接的好处是,您将大大减少CPU负载。

更好的捕鼠器是Sysinternals' Handle实用程序。这是一个轻量级的重量计划。并且是一个控制台模式应用程序,您可以重定向其输出,这样您就不必使用文件。而且没有等待光标。它还允许使用-p命令行参数选择特定进程,实际想要使用的选项将执行时间降低到合理的水平。此示例代码运行良好:

using System;
using System.Diagnostics;

namespace ConsoleApplication1 {
  class Program {
    static void Main(string[] args) {
      for (int ix = 0; ix < 100; ++ix) {
        var psi = new ProcessStartInfo(@"c:\bin\handle.exe", @"-p consoleapplication1");
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        var prc = Process.Start(psi);
        var txt = prc.StandardOutput.ReadToEnd();
        Console.WriteLine(txt);
        System.Threading.Thread.Sleep(1000);
      }
      Console.ReadLine();
    }
  }
}

哦,并且抵制使用其“关闭文件”选项的诱惑。如果您正在寻找永久销毁硬盘驱动器数据的方法,那将是唯一的好处。