Python 从系统帐户创建用户显示窗口

Python 从系统帐户创建用户显示窗口,python,windows,py2exe,pywin32,windows-task-scheduler,Python,Windows,Py2exe,Pywin32,Windows Task Scheduler,我有一个pywin32应用程序,它是从系统启动时触发的schtask运行的。任务从系统帐户运行,因此它将在登录的任何帐户上运行 应用程序按预期运行(在系统启动时)并读取/写入磁盘,但在登录后,应用程序的窗口不会显示在任何用户的帐户上,即使只有用户登录后才创建窗口 import os r = os.popen('quser console') u = r.read() if u: #(variables previously initialized) self.hwnd = Create

我有一个pywin32应用程序,它是从系统启动时触发的schtask运行的。任务从系统帐户运行,因此它将在登录的任何帐户上运行

应用程序按预期运行(在系统启动时)并读取/写入磁盘,但在登录后,应用程序的窗口不会显示在任何用户的帐户上,即使只有用户登录后才创建窗口

import os
r = os.popen('quser console')
u = r.read()
if u:  #(variables previously initialized)
    self.hwnd = CreateWindow( mywinclass, "MyApp", style, \
          0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
          0, 0, hinst, None)
当从登录用户的控制台运行应用程序时,窗口显示良好,但从任务启动时,没有窗口显示

我的日志表明self.hwnd是一个正常句柄,CreateWindow显示GetLastError()中没有错误

当从系统帐户运行时,任务在任务管理器中指示没有GDI对象,但当从登录的用户控制台运行时,当然会显示对象


是否可以从系统帐户为登录用户创建窗口?我该如何做才能使应用程序(无论是启动时还是登录触发时)为所有用户运行,但提升了权限(因此它将为非管理员显示,但不允许他删除任务)?

好的,我现在意识到会话0隔离的安全功能不允许我做我想做的事情(从sysem帐户为用户创建一个UI窗口)有很好的理由。这有助于我更好地理解这个概念

我相信我的选择是创建一个没有UI的服务或应用程序,将数据保存到只读文件中,然后创建另一个应用程序,为用户在UI上读取数据。该服务将以提升的权限自动运行,任何用户(管理员除外)都不能终止该服务

另一个选项是像以前一样创建一个应用程序,在启动时使用schtasks,系统帐户也会这样做


我认为这两个选项都需要一个单独的应用程序(使用用户帐户运行)这只是读取由更高权限的服务/应用程序创建的数据,允许用户界面并采取其允许的操作。

假设您运行的是Vista、2K8或更高版本,听起来好像您正在运行会话隔离。有关更多信息,请参阅此。Rusty,谢谢!这看起来确实是问题所在-我正在运行Windows 7。因此,我的问题仍然存在。我只想运行任务,这样用户就不能终止任务,但允许他查看和交互。我正在旧的2007博客链接中搜索备选方案。在目标会话中作为系统启动流程(如可以做什么),尝试调用以将
TokenSessionId
设置为active console会话自。然后使用该令牌调用。系统帐户应具有访问用户桌面的权限,否则需要首先使用来自的令牌运行帮助程序进程。此进程具有访问桌面的权限,因此它可以向用户窗口的ACL添加必要的ACE工作站和桌面。