Захват полной версии файла exe на Python

#python #winapi

Вопрос:

Мне было интересно, есть ли простой способ получить полную версию файла exe на python (например, если вы щелкните правой кнопкой мыши на свойствах файла и перейдете к деталям, вы найдете что-то вроде версии файла 1.1.1.0).

Я нашел что-то близкое , используя win32api.GetFileVersionInfo , однако, при перечислении свойств файла под FileVersionLS ним, похоже, указана только одна цифра, крайняя правая цифра версии файла (поэтому в приведенном выше примере он дал 0 в 1.1.1.0), когда мне нужен был полный номер версии.

Надеюсь, это имеет смысл, пожалуйста, дайте мне знать, если мне нужно что-то уточнить.

Спасибо за чтение!

Ответ №1:

FileVersionLS и FileVersionMS действуйте вместе, чтобы представить полный номер версии в виде 64-разрядного целого числа:

dwFileVersionMS

Тип: DWORD

Наиболее значимые 32 бита двоичного номера версии файла. Этот элемент используется в dwFileVersionLS для формирования 64-разрядного значения, используемого для числовых сравнений.

dwFileVersionLS

Тип: DWORD

Наименее значимые 32 бита двоичного номера версии файла. Этот элемент используется с dwFileVersionMS для формирования 64-разрядного значения, используемого для числовых сравнений.

Каждый из них битно упакован двумя 16-битными числами, поэтому вам нужно немного изменить отдельные числа. Вы можете использовать win32api.LOWORD() и win32api.HIWORD() для этого, например:

 def get_file_version(self, path):
    info = win32api.GetFileVersionInfo(path, '\')
    ms = info['FileVersionMS']
    ls = info['FileVersionLS']
    return (win32api.HIWORD(ms), win32api.LOWORD(ms),
            win32api.HIWORD(ls), win32api.LOWORD(ls))