为什么我尝试在 Windows 中安装 Python 服务时出错?
Why do I get an error trying to install my Python service in Windows?
好的,所以我写了一个 python 服务,它只是写入一个文件。我用 cx_freeze 将其全部打包,并通过命令提示符将其作为服务安装。它运行良好,但后来我意识到它要写入的文件位于某个奇怪的目录中,因此我更改了服务代码以将文件写入我的文档。这是我的 Python 服务的代码:
import win32service
import win32serviceutil
import win32event
class PySvc(win32serviceutil.ServiceFramework):
_svc_name_ = "PySvc"
_svc_display_name_ = "Python Test Service"
_svc_description_ = "This is a service that simply writes to a file"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcDoRun(self):
import servicemanager
f = open('C:/Users/Luke/Documents/test.dat', 'w+')
rc = None
while rc != win32event.WAIT_OBJECT_0:
f.write('TEST DATA\n')
f.flush()
rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)
f.write('SHUTTING DOWN...\n')
f.close()
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
if __name__ == '__main':
win32serviceutil.HandleCommandLine(PySvc)
这一行:
f = open('C:/Users/Luke/Documents/test.dat', 'w+')
以前看起来像这样(当它工作时):
f = open('test.dat', 'w+')
这是我对代码所做的唯一更改。
这次当我尝试在 cmd 中安装它时,它返回了这个令人沮丧的错误:
Exception occurred while initializing the installation:System.BadImageFormatException: Could not load file or assembly 'file:///C:\PySvc\PySvc.exe' or one of its dependencies. The module was expected to contain an assembly manifest..
发生了什么?有帮助吗?
我找到了解决方案,并意识到我真的很业余。在此过程中的某个地方,我不小心删除了 if __name__ == '__main__':
中的最后 2 个 '_',如您在代码中所见。只是告诉你在问 SO 问题之前你应该检查你所有的代码!所以我改变了这个:
if __name__ == '__main':
为此:
if __name__ == '__main__':
好的,所以我写了一个 python 服务,它只是写入一个文件。我用 cx_freeze 将其全部打包,并通过命令提示符将其作为服务安装。它运行良好,但后来我意识到它要写入的文件位于某个奇怪的目录中,因此我更改了服务代码以将文件写入我的文档。这是我的 Python 服务的代码:
import win32service
import win32serviceutil
import win32event
class PySvc(win32serviceutil.ServiceFramework):
_svc_name_ = "PySvc"
_svc_display_name_ = "Python Test Service"
_svc_description_ = "This is a service that simply writes to a file"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcDoRun(self):
import servicemanager
f = open('C:/Users/Luke/Documents/test.dat', 'w+')
rc = None
while rc != win32event.WAIT_OBJECT_0:
f.write('TEST DATA\n')
f.flush()
rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)
f.write('SHUTTING DOWN...\n')
f.close()
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
if __name__ == '__main':
win32serviceutil.HandleCommandLine(PySvc)
这一行:
f = open('C:/Users/Luke/Documents/test.dat', 'w+')
以前看起来像这样(当它工作时):
f = open('test.dat', 'w+')
这是我对代码所做的唯一更改。 这次当我尝试在 cmd 中安装它时,它返回了这个令人沮丧的错误:
Exception occurred while initializing the installation:System.BadImageFormatException: Could not load file or assembly 'file:///C:\PySvc\PySvc.exe' or one of its dependencies. The module was expected to contain an assembly manifest..
发生了什么?有帮助吗?
我找到了解决方案,并意识到我真的很业余。在此过程中的某个地方,我不小心删除了 if __name__ == '__main__':
中的最后 2 个 '_',如您在代码中所见。只是告诉你在问 SO 问题之前你应该检查你所有的代码!所以我改变了这个:
if __name__ == '__main':
为此:
if __name__ == '__main__':