Получить FileVersionInfo для исполняемого файла в переменной среды PATH, не зная полного пути к файлу

#c# #.net #windows

#c# #.net #Windows

Вопрос:

Я хотел бы сделать что-то вроде этого:

 FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(SomeFile.exe);
 

… Но я не знаю полного пути к файлу SomeFile.exe . Я знаю, что он будет находиться в ПУТИ Windows или в текущем каталоге, из которого выполняется мой код, но возможно, что может быть более одной копии SomeFile.exe в системе. Если я использую класс процесса для запуска SomeFile.exe , я могу просто сделать это:

 Process.StartInfo.FileName = SomeFile.exe;
Process.Start();
 

Мне нужен способ получить FileVersionInfo того же SomeFile.exe это было бы запущено вместе с Процессом.Запустите () без необходимости ручного поиска по расположениям ПУТИ Windows и текущему каталогу. Хотя можно было бы выполнить ручной поиск, это не решает проблему информирования меня о том, какой SomeFile.exe Windows выберет выполнение, если в процессе не указан путь к файлу.StartInfo.FileName Важно, чтобы я не получал FileVersionInfo другого SomeFile.exe .

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

1. Один из верных способов сделать это — CreateProcess CREATE_SUSPENDED затем использовать HPROCESS для получения информации о пути и версии. Однако в C # это не совсем просто.

2. Path.GetFullPath ?

3. @dxiv спасибо за предложение… Я рассмотрю возможность его приостановки, но, возможно, я даже смогу просто создать его без приостановки и использовать Process. MainModule. Имя файла, а затем уничтожить его. Это довольно запутанно, но может быть достаточно хорошо для моих нужд здесь, хотя все еще открыт для других идей, если кто-нибудь еще прочитает это. Надеялся на более элегантный / эффективный метод.