当前位置: 首页 > 面试题库 >

使用python通过Windows服务打开另一个程序

常彭薄
2023-03-14
问题内容

我正在尝试使用python代码通过Windows服务打开/执行另一个程序。Windows服务启动时,将执行另一个程序,即记事本。代码很好,没有错误,但是它没有打开程序。代码如下。

码:

import win32serviceutil
import win32service
import win32event
import win32com.shell.shell as w32shell
import os
import sys
import win32process as process

class SmallestPythonService(win32serviceutil.ServiceFramework):
  _svc_name_ = "BSmallestPythonService"
  _svc_display_name_ = "BSmallest possible Python Service"
def __init__(self, args):
    win32serviceutil.ServiceFramework.__init__(self, args)
    # Create an event which we will use to wait on.
    # The "service stop" request will set this event.
    self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)


def SvcStop(self):
    # Before we do anything, tell the SCM we are starting the stop process.
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    # And set my event.
    win32event.SetEvent(self.hWaitStop)

def SvcDoRun(self):
    win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
    import subprocess
    cmd = "notepad.exe"
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, creationflags=0x08000000)
    process.wait()

if __name__=='__main__':
    win32serviceutil.HandleCommandLine(SmallestPythonService)

在SvcDoRun方法中,我尝试了以下代码,但未成功:

import subprocess
subprocess.Popen('calc.exe', shell=False)

也尝试过但没有成功:

import subprocess 
subprocess.call('notepad.exe', shell=False)

也尝试过但没有成功:

import win32api
win32api.WinExec('NOTEPAD.exe') # Works seamlessly

我想念什么吗?否则我做错了!请帮忙


问题答案:

Windows服务在会话0中运行,而交互式程序在另一个会话中运行。通常,只有一个登录用户时,这将是会话1。现在,您的代码将在会话0中创建进程,因为它在会话0中运行。因此,会话1中的交互式用户桌面无法与这些进程进行交互。

可以在与进程父进程不同的会话中启动进程的运行,但这绝非易事:http :
//blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-
an从Windows的服务交互过程在Windows
Vista和Later.aspx中


一种可能的解决方法是运行一个后台进程,该进程在每个用户登录时启动。该服务可以使用IPC与后台进程进行通信,并要求后台进程完成在交互式桌面中启动进程的常规工作。



 类似资料:
  • 问题内容: 我知道如何更新自己的程序,也知道如何使用预定义的Uri打开程序(例如,用于短信或电子邮件) 我需要知道如何创建一个意图来打开MyTracks或其他我不知道他们在听什么意图的应用程序。 我是从DDMS获得此信息的,但是我并没有成功将其转换为可以使用的Intent。这是从手动打开MyTracks时获取的。 谢谢你的帮助 问题答案: 首先,Android中的“应用程序”概念是一个扩展的概念。

  • 本文向大家介绍Asp.net中通过Button打开另一个的frm,包括了Asp.net中通过Button打开另一个的frm的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,代码中有注释,大家多看看。 以上所述是小编给大家介绍的Asp.net中通过Button打开另一个的frm,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊

  • 我正在使用尤里卡发现服务器。我可以通过通过使用服务名从另一个微服务调用一个微服务,这对Eureka服务器是可见的。我听说在不久的将来将被弃用。 我还可以通过使用从另一个微服务调用一个微服务,但在本例中,我需要使用整个主机名。我不能叫他们服务名称。 是的,我可以从属性文件设置基本url,这样不需要重新启动jar,我们就可以更改基本url。如果我们这样做,那么我们可能不需要任何discovery服务器

  • 问题内容: 我有一个JFrame和JPanel, 里面装满了 带有 动作监听器的Jsomethings 。当用户单击一个对象时,我想打开另一个JFrame。这是我所做的: (RejectApp调用一个新的JFrame。)因此,另一个JFrame在屏幕上打开,带有更多选项。它可以正常工作(到目前为止),但是我想知道这个标准吗?我的意思是这样调用main方法?另一个问题是,不使用cardlayout(

  • 我使用了两页的POM模型。登录页 PS.它是工作正常,如果返回类型被更改为无效的验证登录(). 参考BaseTest。 登录页 登录测试 我也需要测试一下主页,但自从得到它后就被卡住了 有人能帮忙吗。提前感谢!

  • 问题内容: 我正在尝试学习制作一个带有几个按钮的简单应用程序,每个按钮都打开另一个应用程序,从而消除了对其他应用程序的需求。我只是想不通。另外,我可以在此活动中放置多个按钮来打开另一个应用程序吗?我也找不到那个答案。 非常感谢您的帮助:D 问题答案: 希望此实现能够起作用: 唯一的事情是您必须事先安装该应用程序。

  • 我想通过selenium webdriver 3.6.0启动Firefox浏览器,并更改浏览器的一些默认设置。具体来说,我希望Firefox在自动测试期间下载文件,而不提示是否保存文件,也不提示是否下载到默认目录以外的预定义目录,即downloads文件夹。 在google chrome上执行此操作的方法如下: 在创建新配置文件后,通过设置首选项,在Firefox上进行相关尝试,但没有成功。 我包

  • 本文向大家介绍Python编写Windows Service服务程序,包括了Python编写Windows Service服务程序的使用技巧和注意事项,需要的朋友参考一下  如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32,自己去下载然后安装(注意下载符合自