2015-12-15 32 views
1

我有一个小应用程序。为了保护,我使用c:/hwid.exe。该应用程序返回pc的HWID。示例代码:Python和Pyinstaller:在代码中包含二进制应用程序

def HWID_LIC(): 
    try: 
     if hashlib.md5(open('c:\hwid.exe', 'rb').read()).hexdigest() != 'bca173dc': 
      sys.exit(1) 
     out = os.popen("c:\hwid.exe").read().strip() 
     if out not in lic: 
      sys.exit(1) 
    except: 
     sys.exit(1) 

HWID_LIC() 

我想包括在我的应用hwid.exe和需要的解决方案都在一个文件中。有可能在Python中做到这一点? hwid.exe有30 kb。

回答

1

这是可能的。您需要搜索你hwid.exe在sys._MEIPASS

import sys 
import os 
import hashlib 

def HWID_LIC(): 
    if os.path.isfile('hwid.exe'): 
     print('file found in .') 
    else: 
     print('file not found in .') 

    if os.path.isfile(sys._MEIPASS + os.sep + 'hwid.exe'): 
     print('file found in sys._MEIPASS') 
    else: 
     print('file not found') 
    print(hashlib.md5(open(sys._MEIPASS + os.sep + 'hwid.exe', 'rb').read()).hexdigest()) 


if __name__ == '__main__': 
    HWID_LIC() 

例spec文件:

# -*- mode: python -*- 
a = Analysis(['test.py'], 
      pathex=[], 
      hiddenimports=[], 
      runtime_hooks=None) 
import platform 
if platform.system().find("Windows")>= 0: 
    a.datas = [i for i in a.datas if i[0].find('Include') < 0] 
a.binaries = [x for x in a.binaries if not x[0].startswith("scipy")] 
a.binaries = [x for x in a.binaries if not x[0].startswith("numpy")] 
a.datas += [('hwid.exe','.\\hwid.exe','DATA'),] 
pyz = PYZ(a.pure) 
exe = EXE(pyz, 
      a.scripts, 
      a.binaries, 
      a.zipfiles, 
      a.datas, 
      name='test.exe', 
      debug=False, 
      strip=None, 
      clean=True, 
      upx=False, 
      console=True) 

,并创建onefile EXE蒙山

pyinstaller t_onefile.spec 

当执行TEST.EXE你看:

j:\tmp>test.exe 
file not found in . 
file found in sys._MEIPASS 
754222d71581010a45732c471437ecf7