我想在登录前启动一个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运行。但该应用程序在前台不存在。有什么想法吗?
这是由于Windows Vista时代服务不能与桌面交互的限制。