2013-10-24 1 views
1

Я использую приложение python, используя py2exe. При распаковке, помимо основного файла exe, дистрибутив содержит некоторые файлы dll, файлы конфигурации и т. Д. Я хотел бы добавить файл манифеста, который будет включен в дистрибутив. В этом файле будут перечислены все необходимые файлы (dll, файлы конфигурации) и какой-то криптографический хеш для каждого из этих файлов, так что если файлы будут подделаны, основной исполняемый файл не будет запущен.Как создать файл манифеста для моего дистрибутива py2exe?

Я мог написать сценарий для генерации файла во время сборки, а затем проверить этот файл изнутри python, когда приложение запущено. Однако, похоже, это должно быть общепринятым, так же как есть инструменты для этой работы?

+1

Если это в комплекте, что мешает кому-то из изменения файла манифеста, а? –

+2

Я верю, что он будет работать: вы вычисляете хэш для всех файлов (как функцию всех хэшей каждого файла), а затем hardcode, что где-то в exe. Если магическое число в exe не совпадает с тем, что в манифесте (или манифест не существует), а затем прервите. – izak

ответ

1

Хотя для этого могут быть доступны инструменты, доступные в Интернете, вы, вероятно, можете просто добавить код в свою программу компилятора python. Это решение может быть не самым лучшим или самым чистым решением, но оно должно работать. Вы можете узнать, какие файлы dll и подобные зависимости будут созданы, скомпилировав его один раз в формате без zip и перечислив файлы. Затем вы можете добавить код в программу python, чтобы проверить, присутствуют ли эти файлы, и скомпилировать его снова с помощью модифицированной программы python, но без zip-файла. Вы можете создать индексный файл в каталоге dist, в котором находятся все зависимости, путем печати строки в новый файл, открытый в режиме записи, и вы можете сжать каталог вручную, используя zip-файл модуля python.

Более простая альтернатива, которая может быть то, что вы хотите, это просто связать все эти зависимости в один файл exe. Вы можете сделать это, как это так, это одна содержит много дополнительных опций, чтобы добавить в исполняемый файл в сыром ввода:

from distutils.core import setup 
import py2exe, sys, os 

sys.argv.append('py2exe') 

setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}}, 
    windows = [{'script': raw_input("input filename: "), 
       "icon_resources": [(1, raw_input("iconfilename: "))] 
       }], 
    name = raw_input("enter program name: "), 
    version = raw_input("enter version: "), 
    description = raw_input("enter description: "), 
    author = raw_input("enter author: "), 
    author_email = raw_input("enter author email: "), 
    maintainer = raw_input("enter maintainer: "), 
    maintainer_email = raw_input("enter maintainer email: "), 
    url = raw_input("enter url: "), 
    zipfile = None, 
) 
Смежные вопросы