当涉及外部日志配置文件时,服务无法启动



我正在使用pyinstaller将我的多模块python应用程序捆绑到 one-file exe中。该应用程序的输入点是扩展win32serviceutil.ServiceFramework的模块 - 因此,这是作为Windows服务运行的。当我尝试为用户配置的Logger INI文件提供此应用程序时,就会出现问题。在我的主模块中,我设置了记录器,

log_file_path = path.join(path.dirname(path.abspath(__file__)), 'logging.conf')
logging.config.fileConfig(log_file_path)

我的pyinstaller命令如下:

pyinstaller -F <main-file>.py -n <exe-name> --hidden-import=win32timezone --add-data "logging.conf;."

包装后,我将生产的EXE作为服务安装,并成功地将其作为Windows服务注册。但是,当我尝试启动它时,它会失败。

有趣的位是在我配置的位置中创建一个空日志文件。因此,这意味着1(应用程序确实读了我的配置文件,而2(这里没有权限问题。是否有人试图建立这样的东西可以帮助您阐明我可能缺少的东西?

与Pyinstaller一起使用单文件选项时,我们无法有效使用代码中的__file__变量来识别捆绑的应用程序或其位置。相反,Pyinstaller在运行时设置了特殊的系统变量,例如sys._MEIPASSsys.executable;该文件分别指定由Bootloader创建的临时文件夹以运行该应用程序,并分别指定冷冻可执行文件(Bootloader(的位置。

一旦我更改了路径操作以使用这些变量来找到日志配置文件,该文件就会成功读取并且服务有效。

最新更新