在Windows中将python .py作为服务启动
我创建了一个Windows服务,用来启动一个.py脚本。
sc create "Maraschino" binPath= "C:\HTPC\Maraschino\maraschino-cherrypy.py" DisplayName= "Maraschino" depend= "Tcpip"
然后,我在注册表中添加了一个键,把这个.py文件链接到用python.exe打开。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Maraschino\Parameters]
"AppDirectory"="C:\\Python27"
"Application"="C:\\Python27\\python.exe C:\\HTPC\\Maraschino\\maraschino-cherrypy.py"
但是,当我尝试启动这个服务时,出现了错误193 0xc1。查了一下,发现这个错误是因为我试图启动的文件不是一个有效的.exe文件。我知道它不是.exe,而是.py文件,把它链接到用python.exe打开应该能解决这个问题,但我好像犯了错误。有没有人能告诉我,在把这个脚本链接到python.exe时,我可能做错了什么?
谢谢
3 个回答
更新来自@Ohad。首先,srvany.exe需要在所有机器上部署。
第一步:
- 下载并安装Windows资源工具包。
- 这个工具包可以在我的电脑里找到:C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe。
然后打开命令提示符,输入以下命令:
sc create "[你的服务名称]" binPath="C:\Program Files (x86)\Windows Resource Kits\Tools\srvany.exe" start=auto DisplayName="[你的服务监控名称]"
[SC] 创建服务成功
第二步:创建一个文件.reg,内容如下,然后双击这个文件。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[YourService]\Parameters]
"Application"="C:\\[YourService Executable].exe"
第三步:现在启动服务,它会执行你在文件.reg中指定的内容。
完成
我不知道sc是怎么工作的,但我觉得一定有办法把参数传递给这个程序。所以你可以试着注册 "C:\Python27\python.exe C:\HTPC\Maraschino\maraschino-cherrypy.py" 这个命令。
你也可以试试 py2exe :)
你可以使用srvany.exe这个工具,它是微软专门为这种任务准备的。
首先,下载并安装Windows资源工具包。注意:你只需要srvany.exe,它适用于所有版本的Windows。
假设你把Windows资源工具包安装在了C:\Program Files\Windows Resource Kits\,那么运行:
sc create "[YourService]" binPath= "C:\Program Files\Windows Resource Kits\srvany.exe"
接下来,打开regedit(注册表编辑器)。
在注册表编辑器的对话框中,选择
HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Services > [YourService]
选中[YourService]后,从工具栏点击编辑,选择新建,然后选择键。
输入Parameters,然后按回车。
在工具栏选择编辑,再选择新建,然后选择字符串值。
输入Application,然后按回车。
右键点击Application,选择修改。
C:\Python27\python.exe C:\[YourServicePath].py
点击确定按钮。
就这样!你成功创建了一个新的服务。