我在一个应用程序上工作,我想找出一个进程使用我的文件系统上的哪些文件。
在尝试使用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();
}
答案 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();
}
}
}
哦,并且抵制使用其“关闭文件”选项的诱惑。如果您正在寻找永久销毁硬盘驱动器数据的方法,那将是唯一的好处。