跟踪流程的最佳方法

时间:2012-02-08 20:21:39

标签: c# .net backgroundworker process

在我的咨询公司,我们使用一些非常昂贵的模拟软件。我需要一种方法来监视这些应用程序/进程的使用情况(在后台,使用C#)。我们的想法是,当有人运行特定应用程序时,系统会提示他们输入作业名称。然后,当他们关闭程序时,他们使用它的时间被发送到驻留在网络上的数据库。通过这种方式,我们可以通过以美元/分钟为基础向客户收费来收回软件的成本。除了提示之外,该程序对于用户来说几乎是不可见的。

我想过几种方法,但我不确定最好的方法:

  1. 有一个在启动时运行的程序,只有一个托盘图标。我想那时我必须有一个后台工作人员连续监视进程,可能会在线程休眠,每5分钟左右检查一次进程。

  2. 使用类似Quartz.net的东西,在启动时使用托盘图标。如果这甚至适用于每分钟。我对Quartz.net不是很熟悉,但从我的研究看起来它可能是可行的。

  3. 使用某种Windows服务。这是我最不熟悉的。

  4. 哪种方法最有成效?感谢

1 个答案:

答案 0 :(得分:0)

您可以编写一个简单的C#程序,在执行时收集所需的信息和开始时间。

然后使用Process类执行模拟软件。 等待进程使用WaitForExit()结束,并执行执行时间等所需的任何操作。

所以基本上你最终得到的应用程序只是收集所需的信息,启动主应用程序,等待应用程序结束,并执行总执行时间所需的一切。只要对用户不可见,您可以在等待应用程序结束时最小化主窗口(也可以作为收集所需信息的表单)。

这是在C#中启动可执行文件的一个小例子。

private void LaunchApp()
    {
        Process proc = new Process();
        /* we are going to assume wordpad is installed on workstation */

        /* collect needed info and time */


        proc.StartInfo.FileName = "Wordpad.exe";
        proc.StartInfo.Arguments = "SomeFile.txt";
        proc.Start();
        proc.WaitForExit();


        /* App has ended. Now process execution time etc. */
    }