几天来,我一直在寻找一个解决方案,但没有成功。我们有一个windows服务构建,可以将一些文件从一个位置复制到另一个位置。
所以我用Python 3.7构建了下面的代码。完整的代码可以在Github上找到。
当我使用python运行服务时,一切正常,我可以安装服务并启动服务。
这使用命令:
- 安装服务:**
- Python jis53_backup.py安装
- 运行服务:**
- python jis53_backup.py start
当我现在使用pyinstaller编译这段代码时,命令是:
- pyinstaller-F--hidden-import = win32timezone jis53_backup.py
创建exe后,我可以安装服务,但当尝试启动服务时,我得到错误:
启动服务时出错:服务没有及时响应启动或控制请求
我在Stackoverflow和Google上浏览了多个与此错误相关的帖子,但没有成功。我没有选择在需要运行此服务的PC上安装Python 3.7程序。这就是为什么我们试图得到一个. exe构建。
我已经确保根据我在不同问题中找到的信息更新了路径。
路径定义的图像:
我还复制了pywintypes37.dll文件。
- 从-> Python37\Lib\site-packages\pywin32_system32 *
- 转到-> Python37\Lib\site-packages\win32 *
有没有人有任何其他的建议,如何让这个工作?
'''
Windows service to copy a file from one location to another
at a certain interval.
'''
import sys
import time
from distutils.dir_util import copy_tree
import servicemanager
import win32serviceutil
import win32service
from HelperModules.CheckFileExistance import check_folder_exists, create_folder
from HelperModules.ReadConfig import (check_config_file_exists,
create_config_file, read_config_file)
from ServiceBaseClass.SMWinService import SMWinservice
sys.path += ['filecopy_service/ServiceBaseClass',
'filecopy_service/HelperModules']
class Jis53Backup(SMWinservice):
_svc_name_ = "Jis53Backup"
_svc_display_name_ = "JIS53 backup copy"
_svc_description_ = "Service to copy files from server to local drive"
def start(self):
self.conf = read_config_file()
if not check_folder_exists(self.conf['dest']):
create_folder(self.conf['dest'])
self.isrunning = True
def stop(self):
self.isrunning = False
def main(self):
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
while self.isrunning:
# Copy the files from the server to a local folder
# TODO: build function to trigger only when a file is changed.
copy_tree(self.conf['origin'], self.conf['dest'], update=1)
time.sleep(30)
if __name__ == '__main__':
if sys.argv[1] == 'install':
if not check_config_file_exists():
create_config_file()
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(Jis53Backup)
servicemanager.StartServiceCtrlDispatcher()
else:
win32serviceutil.HandleCommandLine(Jis53Backup)
1条答案
按热度按时间gkn4icbw1#
我在使用
pyinstaller
编译后也遇到了这个问题。对我来说,问题是我以动态的方式使用了日志和日志文件的路径,例如:当我使用
python service.py install/start
启动服务时,这工作得很好。但是在使用pyinstaller
编译它之后,它总是给我一个没有及时启动的错误。为了解决这个问题,我将所有的动态路径设置为静态路径,例如:
通过
pyinstaller
编译后,它现在工作正常,没有任何错误。看起来像当我们做动态路径,它没有得到文件的实际路径,因此它给出了错误。希望这也能解决你的问题。谢谢