обнаружение процесса запуска системного файла из приложения

#c# #windows

#c# #Windows

Вопрос:

Я программирую для компании-разработчика программного обеспечения.
В нашей компании есть приложение под названием (common component command) ccc.exe . Это приложение предназначено для отправки команды на сервер Microsoft IIS.

Теперь и во время моей программы я хочу обнаружить запуск этого процесса (ccc.exe ).

После этого я использую этот метод:

   private bool IsProcessRunning(string processName)
    {            
        Process[] pname = Process.GetProcessesByName(processName);
        if (pname.Length == 0)
            return false;
        else
            return true;
    }
  

Но, к сожалению, на их компьютерах запущен системный процесс, называемый CCC.EXE (Это от ATI Technologies).

Он выполняется при запуске. И если я использую этот метод, он вернет неверное значение, потому что у них одинаковое имя.

Итак, как я могу распознать CCC.EXE (системный файл) из ccc.exe *32?

Комментарии:

1. Проверьте полный путь от Process объектов.

2. проверьте хэш-значения (но тогда у вас возникает проблема, когда ccc.exe обновлено) Или проверьте свойства из файла для компании или …

3. Чего вы пытаетесь достичь? Вы хотите предотвратить многократный запуск вашего приложения? Для этого следует использовать мьютекс.

4. С . и , пунктуацией на английском языке вы не ставите пробелы с обеих сторон, сразу после.

5. Можете ли вы изменить CCC.exe создать общий ресурс, например, семафор, который могут проверять все процессы? Его также можно использовать для предотвращения запуска нескольких копий.

Ответ №1:

Вы могли бы попробовать посмотреть на процесс.Свойство MainModule:

 Process[] pname = Process.GetProcessesByName(processName);
if (pname.Any(x => x.MainModule.FileName == "the path to the ccc.exe"))
{
    return true;
}

return false;
  

Примечание: Имейте в виду, что иногда при настройке объекта Process я обнаруживал, что вещи, которые работают в DEV, не всегда работают в рабочей среде из-за разрешений безопасности.