我有一个有效的python win32服务,尝试通过使用WiX Toolset构建的msi进行分发。
但是,该服务安装为“Startup Type Automatic”,安装时启动,以sc
命令启动,并且功能正常。
但重新启动计算机时,它不会自动启动。它试图启动,但我在事件查看器中得到2个错误 - > Windows日志 - >系统
A timeout was reached (30000 milliseconds) while waiting for the Edit Service service to connect.
The Edit Service service failed to start due to the following error:
The service did not respond to the start or control request in a timely fashion.
以下是引用serviceinstall的WiX部分。
<File Id="MainEXE" Source="editservice.exe" KeyPath="yes"/>
<ServiceControl Id="Edit" Name=Edit Service" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
<ServiceInstall
Id="service"
Account="\Ps"
Password="scrubed$"
Start="auto"
ErrorControl="normal"
Name="Edit Service"
Type="ownProcess"
Vital="yes" />
<RemoveFolder Id="Purge" On="uninstall" />
为什么只有在系统启动时才能启动它的任何想法?如果需要,我可以提供更多的WiX或python服务实现
答案 0 :(得分:0)
所以我想我已经弄清楚.. 服务启动功能中的每一行都会被执行。
然而 - 最后一行代码是对time.sleep(10)
的调用。似乎这行代码没有完成运行,导致启动失败即使服务正在运行。
在生产中,睡眠时间将增加到一小时。因此我认为延迟开始是首选方法。
要在WiX中执行此操作,请按照以下代码模板进行操作。
<ServiceControl Id="Edit" Name="NBC Edit Service" Start="install" Stop="both" Remove="uninstall" Wait="yes" />
<ServiceInstall
Id="service"
Account="NYDPS\Portus"
Password="getyourownpassword"
Start="auto"
ErrorControl="normal"
Name="NBC Edit Service"
Type="ownProcess"
Vital="yes" >
<ServiceConfig DelayedAutoStart="yes" OnInstall="yes" OnReinstall ="yes" />
</ServiceInstall>
<RemoveFolder Id="Purge" On="uninstall" />
答案 1 :(得分:0)
@tdelaney @PhilDW真实的答案..
FWIW - 在python服务中使用time.sleep()
,是进入一个占用处理器时间的无限循环。在无限循环中接收单曲是不可能的。有一种 Windows服务实现方式来完成睡眠
而不是
sleep.time(10)
使用
#where timeout = sleep time
if win32event.WaitForSingleObject(self.hWaitStop, timeout) == win32event.WAIT_OBJECT_0:
break
注意 - sleep.time输入以秒为单位,win32event.WaitForSingleObject
以毫秒为单位