使用python在登录前将应用程序作为服务启动

问题描述 投票:0回答:1

我想在登录前启动一个exe,我试图用Python来实现。下面是我试图使用的一个示例代码,其中 SMWinservice 定义为 此处.

# imports are there

class MyService(SMWinservice):
    _svc_name_ = 'testService1'
    _svc_display_name_ = 'Test Service 1'
    _svc_description_ = 'Test ServiceFramework 1 Description'

    def start(self):
        self.isrunning = True

    def stop(self):
        self.isrunning = False

    def main(self):
        subprocess.Popen(r'C:\Program Files\Notepad++\notepad++.exe')
        # i=0
        # while self.isrunning:
        #     with open('C:\\test1323.txt','a') as file:
        #         file.write(datetime.now().isoformat()+'\n')
        #     i=i+1
        #     time.sleep(5)


if __name__ == '__main__':
    MyService.parse_command_line()

当我简单地尝试在一个文件中写一些东西时,上述代码工作正常(在查看了 此职位 和解决错误)。)

但是当我尝试启动服务时(手动或重启电脑),exe无法启动,我不明白为什么。我到底漏掉了什么或出了什么问题?我应该如何处理这样的问题。我是一个通过python的眼睛来了解windows功能的新手。我已经卡在这几天,任何代码或帮助是非常感激。

EDIT

我改变了 main 方法改为如下。

def main()
    self.process = subprocess.Popen('C:\\Program Files\\Notepad++\\notepad++.exe')
    while self.isrunning:
        if self.process.pid not in psutil.pids():
            self.isrunning = False

        with open('C:\\logs.txt','a') as file:
            file.write(str(self.process.pid)+'\n')

        time.sleep(5)
    self.process.kill()

当我启动进程时,我可以看到进程的pid被更新在 C:\logs.txt. 在任务管理器中也可以看到该进程作为notepad++.exe运行。但该应用程序在前台不存在。有什么想法吗?

python windows service
1个回答
0
投票

这是由于Windows Vista时代服务不能与桌面交互的限制。

© www.soinside.com 2019 - 2024. All rights reserved.