使用python

时间:2019-06-30 17:20:27

标签: python windows service

我想在登录前启动一个exe,我正在尝试使用Python来实现。以下是我尝试在定义hereSMWinservice的地方使用的示例代码。

# 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()

当我只是尝试在文件中写一些东西(查看this post并解决错误之后),上面的代码就可以正常工作。

但是,当我尝试启动服务(手动或通过重新安装PC)时,exe无法启动,并且我不明白为什么。我缺少什么或出什么问题了?我应该如何处理这样的问题。我是通过Python接触Windows功能的新手。我已经坚持了好几天,很感谢任何代码或帮助。

编辑

我将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()

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

1 个答案:

答案 0 :(得分:0)

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