#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, не всегда работают в рабочей среде из-за разрешений безопасности.