python封装exe+exe封装服务


  • python封装exe+exe封装服务
  • 一、python封装exe
  • 安装pyinstaller:
  • 打包
  • 二、exe封装为服务
  • 使用SC指令封装服务
  • 使用nssm封装服务


一、python封装exe

本来使用的python版本是python3.7.0,是当前的最新版本,但是使用pyinstaller打包.py程序为exe,生成的exe程序运行有错误: “ pyinstaller initfs encoding:unable to load the file system codec”,搜了一下,github上有一句开发者的愤怒评论
Python 3.7 is still not supported, so stop posting “I have PY 3.7 and the same issue”. The only effect is that you are wasting my time and make me angry!
对不起,打扰。不过我查看了pyinstaller的github首页,上面写着支持的版本是2.7 or 3.4-3.7,没想到作为官方的文档介绍也是个是骗子。所以果断卸载了3.7,装了一个python3.6版本。所以以下都是基于python3.6版本进行的。

安装pyinstaller:

在cmd中输入:

pip install pyinstaller

打包

  1. cmd到你的python文件所在的目录,输入
pyinstaller -F yourfilename.py
  1. 此时目录下出现2个新的目录:dist、build,build是生成exe的过程文件,没啥用
  2. 进入dist,就可以找到exe文件

二、exe封装为服务

使用SC指令封装服务

封装的方法有很多种,包括srvany、nssm等方式,我一开始使用的是系统自带的SC指令的方法。
使用管理员权限打开cmd,输入

sc create msgStory binpath= C:\Users\125\Desktop\pythonpostgres\Improve\dist\receiver.exe

如果运行成功,就可以去windows服务管理器里查看自己的服务并且开启了相应的服务了。当然是事实这个指令还有很多的可选项,有更多需要的时候可以去查阅。

但是!并不是所有的exe都可以直接封装为服务并且正常运行的,一般情况下windows服务需要一个OnStart和一个OnStop函数,但是随便一个exe不一定就有这些东西,我也因为这个原因导致自己虽然在服务管理器中有对应的服务,但是却打不开。

使用nssm封装服务

  1. 在这个网址手动选择版本下载,或者直接点击这个下载2.24版本。不过好像有四年没有更新了。
  2. 下载下来的zip文件里有一个win32,一个win64,根据自己的操作系统选择一下。我是64位版本的windows server R2,所以就使用win64文件下的nssm。
  3. 使用管理员权限的cmd进入到nssm的目录(其实不用也可以,后面使用指令会要求获取管理员权限),使用指令
nssm install [servicename]

会有一个弹窗,我们在path那一栏选择我们要启动的exe或是bat文件,然后按下那个install service按钮一般就大功告成了。
如果要删除服务就使用指令

nssm remove [servicename]