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

标签 python windows py2exe pywin32 windows-task-scheduler

我有一个 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() 没有错误。

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

是否可以从系统帐户为登录用户创建一个窗口?我该如何执行此操作,以便应用程序将为所有用户运行(在启动时或在登录触发时),但提升权限(因此它将向非管理员显示,但不允许他删除任务)?

最佳答案

好吧,我现在意识到 session 0 隔离的安全功能不允许我做我想做的事情(从系统帐户为用户创建 UI 窗口),这是有充分理由的。 This Q/A帮助我更好地理解这个概念。

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

另一个选项是像以前一样创建应用程序,在启动时使用 SYSTEM 帐户使用 schtasks,执行相同的操作。

我认为任一选项都需要一个单独的应用程序(使用用户帐户运行),该应用程序仅读取由更高权限的服务/应用程序创建的数据,允许用户进行交互并采取他允许的操作。

关于python - 从系统帐户创建用户显示窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799450/

相关文章:

python - 如何为我的 py2exe 发行版创建 list 文件?

python - py2exe `ImportError: No module named backend_tkagg`

windows - 将输出中的特定字段保存到 Windows CMD 上的变量中

c# - 向没有窗口的进程发送 WM_CLOSE 消息

python - scrapy 中的 Djangoitem

python - sublime text + python 的 anaconda

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

python - 将一些 python 脚本打包为 Linux 的可执行文件

python - 如何使用正则表达式遍历字符?

python - 使用 Python 抓取 HTTP 横幅