我有一个pywin32应用程序,我从一个在系统启动时触发的schtask运行。该任务从SYSTEM帐户运行,以便它可以在登录的任何帐户上运行。
应用程序按预期运行(在系统启动时)并读取/写入磁盘,但是登录后应用程序的窗口不会显示在任何用户的帐户上,即使在用户登录之前未创建窗口。
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)
从登录用户的控制台运行应用程序时窗口显示正常,但从schtask启动时没有窗口。
我的日志表明self.hwnd是一个普通的句柄,CreateWindow没有显示GetLastError()的错误。
当从SYSTEM帐户运行时,任务指示任务管理器中没有GDI对象,但当然从登录用户控制台运行时显示对象。
是否可以从SYSTEM帐户为登录用户创建窗口?我将如何执行此操作以便应用程序将为所有用户运行(在启动时或在登录触发器上),但提升权限(因此它将显示为非管理员,但不允许他删除任务)?
答案 0 :(得分:1)
好的,我现在意识到会话0隔离的安全功能将不允许我做我想要的(从sysem帐户为用户创建UI窗口),原因很充分。 This Q/A让我更好地理解了这个概念。
我相信我的选择是创建一个没有UI的服务或应用程序,将数据保存到只读文件,然后是另一个在用户界面上为用户读取数据的应用程序。该服务将以提升的权限自动运行,并且不能被任何用户杀死(管理员除外)。
另一种选择是像以前一样创建应用程序,在启动时使用schtasks,同时使用SYSTEM帐户。
我认为任何一个选项都需要一个单独的应用程序(使用用户帐户运行),它只读取更高权限服务/应用程序创建的数据,允许用户进行交互并采取他允许的操作。