为什么我尝试在 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__':