Лучший метод для отслеживания процессов - PullRequest
0 голосов
/ 09 февраля 2012

В моей консалтинговой компании мы используем очень дорогое программное обеспечение для моделирования. Мне нужны средства для мониторинга использования этих приложений / процессов (в фоновом режиме, используя C #). Идея состоит в том, что когда кто-то запускает определенное приложение, ему предлагается ввести имя задания. Затем, когда они закрывают программу, количество времени, которое они использовали, отправляется в базу данных, находящуюся в сети. Таким образом, мы можем окупить затраты на программное обеспечение, взимая плату с наших клиентов по цене $ / мин. Помимо подсказки, программа должна быть почти невидимой для пользователей.

Я думал о нескольких способах сделать это, но я не уверен, что лучше:

  1. Есть программа, которая запускается при запуске, только с иконкой в ​​трее. Полагаю, тогда мне понадобится специалист по фону, который будет постоянно следить за процессами, возможно, спит поток и проверяет процессы каждые 5 минут или около того.

  2. Используйте что-то вроде Quartz.net, при запуске и со значком в трее. Если это даже применимо на поминутной основе. Я не очень знаком с Quartz.net, но, судя по моим исследованиям, это выглядит выполнимо.

  3. Использовать какую-то службу Windows. С этим я менее всего знаком.

Какой метод будет наиболее плодотворным? Спасибо

1 Ответ

0 голосов
/ 09 февраля 2012

Вы могли бы написать простую программу на 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. */
    }
...