调程序的感慨,StartServiceCtrlDispatcher时1063错误

昨晚,将程序写完。预计今天上午调试成功之后,就放到windows 服务器上去跑。

期间,出现各种问题。

(1)StartServiceCtrlDispatcher时1063错误

【解决方法】:由于windows service程序,不允许调试,所以如果你硬要调试,这个函数就回返回1063错误。那么怎么解决呢?很简单,你不能直接用vs进行调试。你只能通过打日志的方式,去看程序运行的问题。而必须要强调的是,你首先要注册,然后必须用sc命令或者windows服务器管理器去启动程序。手动启动或者vs调试都将失败。


(2)当解决了上面第1题之后,发现程序还是不正常,要怎么办?

【解决方法】:打日志。在程序的每一个步骤,都打上日志,这样你就能知道程序运行到何处,返回值是什么,哪里出错了,然后解决。


感悟,打日志,才是调程序最重要的手段。一定要多使用,节约时间。

Windows 下,可以使用第三方库 `pywin32` 来将一个 Python 程序打包成 Windows 服务。以下是实现步骤: 1. 安装 `pywin32` 库。可以使用 pip 命令进行安装: ``` pip install pywin32 ``` 2. 编写 Python 程序。可以参考以下示例代码: ```python import time def main(): while True: print('Service is running...') time.sleep(5) if __name__ == '__main__': main() ``` 在该示例代码中,我们定义了一个无限循环来模拟一个长间运行的服务。 3. 使用 `win32serviceutil` 工具将 Python 程序打包成服务。可以参考以下示例代码: ```python import win32serviceutil import win32service import win32event import servicemanager import socket import sys import time import os class MyService(win32serviceutil.ServiceFramework): _svc_name_ = 'MyService' _svc_display_name_ = 'My Service' _svc_description_ = 'This is my service.' def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.stop_event = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.stop_event) def SvcDoRun(self): self.ReportServiceStatus(win32service.SERVICE_RUNNING) try: main() except Exception as e: servicemanager.LogErrorMsg(str(e)) self.ReportServiceStatus(win32service.SERVICE_STOPPED) def main(): while True: print('Service is running...') time.sleep(5) if __name__ == '__main__': if len(sys.argv) == 1: servicemanager.Initialize() servicemanager.PrepareToHostSingle(MyService) servicemanager.StartServiceCtrlDispatcher() else: win32serviceutil.HandleCommandLine(MyService) ``` 在该示例代码中,我们定义了一个继承自 `win32serviceutil.ServiceFramework` 的类 `MyService`,并实现了 `SvcDoRun` 和 `SvcStop` 方法来启动和停止服务。然后使用 `win32serviceutil.HandleCommandLine` 方法来处理命令行参数,从而实现将 Python 程序打包成 Windows 服务的功能。 4. 在命令行中以管理员身份运行以下命令来安装服务: ``` python myservice.py install ``` 其中,`myservice.py` 是上一步中编写的 Python 程序文件名。安装成功后,可以在 Windows 的服务列表中看到新安装的服务。 5. 在服务列表中启动、停止或重启服务。也可以使用以下命令来启动或停止服务: ``` net start MyService net stop MyService ``` 其中,`MyService` 是在第三步中定义的服务名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值