Что нового

Процессы версия файла процесса

RaZum

Знающий
Сообщения
78
Репутация
14
Можно ли без использования WinApi получить версию файла работающего процесса?

Имею ввиду без kernel32/psapi

Можно например получить путь через PowerShell используя get-process -name ProcessName | format-list path

Затем версию встроенной функцией. Но у всех ли есть PowerShell.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Вам нужна кросплатформенность? Тогда смотрите в сторону других языков. Но реализация под Windows у них всё равно будет через WinAPI.
 
Автор
R

RaZum

Знающий
Сообщения
78
Репутация
14
Вам нужна кросплатформенность? Тогда смотрите в сторону других языков. Но реализация под Windows у них всё равно будет через WinAPI.
По ответу понимаю, что дело не в языках, но ответ на свой вопрос я получил.
Попробую найти стандартный и постоянный (от версии к версии) внутренний инструментарий Windows
Сообщение автоматически объединено:

кстати об WinAPI

при проверке _WinAPI_GetProcessFileName на x64 ОС для x86 процессов, все работает, а вот для процессов x64 почему-то нет
 
Последнее редактирование:
Автор
R

RaZum

Знающий
Сообщения
78
Репутация
14
На сколько мне стало понятно, проблема в уровне доступа при открытии процесса.

Теперь скомпилированный x86 скрипт в x64 ОС, получает путь к файлу x64 процесса.

Вообщем эта проблема решена.

Для надежности продолжу поиск альтернативных инструментов...
Сообщение автоматически объединено:

Решение оказалось еще проще.

Вместо GetModuleFileName использовать GetProcessImageFileName
Сообщение автоматически объединено:

если кому интересно
AutoIt код:
   ; можно заменить строку
$aCall = DllCall (@SystemDir & '\psapi.dll', 'dword', 'GetModuleFileNameExW', 'handle', $hProcess, 'handle', 0, 'wstr', '', 'int', 4096)
   ; на эту
$aCall = DllCall ('kernel32.dll', 'bool', 'QueryFullProcessImageNameW', 'handle', $hProcess, 'dword', 0, 'wstr', '', 'dword*', 65536)
 
Последнее редактирование:
Верх