win7上的远程UI脚本处于注销状态
Posted
技术标签:
【中文标题】win7上的远程UI脚本处于注销状态【英文标题】:Remote UI Script on win7 in logged off state 【发布时间】:2013-09-19 10:31:49 【问题描述】:我正在使用 psexec 运行一个远程脚本,该脚本对远程系统中存在的打印对象执行一些 UI 操作。具体来说,使用的 API 是 SHInvokePrinterCommand() 来调用打印机对象的打印机属性。
当用户在 Windows 7 上登录(因此可见桌面)执行时,整个事情工作正常。但是当没有用户登录时,该过程无法工作,API(SHInvokePrinterCommand)成功返回但它似乎没有做任何工作。 WINDOWS XP 在类似条件下,工作正常。
观察结果让我相信,这与这些操作系统中不同的会话和“窗口站”架构有关。 通过远程进程中的一些编码,我能够确定远程进程是由 psexec 在非零会话(会话 2)中启动的,并且它所连接的唯一窗口站是“WinSta0”。(我使用了 EnumWindowStations( ) 为了那个原因)。 WinSta0 是唯一接收来自键盘、鼠标等输入的 windows 站。
有了这么多的观察,我不明白是什么让整个事情在 Windows 7 的情况下不起作用,没有登录。基本上打印机的属性页面在这种情况下实际上没有被调用。 用于执行远程进程的 psexec 形成的会话是否以某种方式不是“完整”会话?有什么办法可以解决这个问题?
欢迎提出任何想法或建议。
【问题讨论】:
能分享一下psexec命令行吗?那里有许多用于指定用户名等的选项。 【参考方案1】:我想到了几件事,主要与 Windows Vista 及更高版本的安全性提高有关。
SHInvokePrinterCommand
在 Vista 及更高版本中已弃用。
PSExec 在服务中运行脚本,该服务在 Vista 及更高版本中 no longer have desktop access。
当没有登录用户时,HKEY_CURRENT_USER 不存在,任何读取它的尝试都会失败。
【讨论】:
埃里克,感谢您的回复。正如我所提到的,当有用户登录系统时,整个事情都可以工作。但是在没有人登录的情况下失败。PS exec 确实在远程计算机中运行一项服务,该服务又在调用 psExec 时在用户在命令行中指定的用户帐户中运行目标可执行文件。据我了解,目标可执行文件本身并不作为服务运行。我使用 -i , -u , -p 选项来指定远程机器的管理员用户名和密码。 -h 并提升权限和 -c 将 exe 复制到远程系统。 @user1624807 我查看了源代码,虽然它是一个迷宫或曲折的小段落,但我确实看到了一些对 HKEY_CURRENT_USER 的注册表引用,当没有登录用户时,这些引用不存在。而且,根据我对how PsExec works 的阅读,PsExec 不会创建完整的会话;它使用当前会话。 再次感谢您的回复。你说的是哪个来源? Windows 源代码?哇!实际上,我设法通过 psexec 本身中的特定开关解决了这个问题。感谢你的帮助。想知道您是如何获得 Windows 的源代码的:P以上是关于win7上的远程UI脚本处于注销状态的主要内容,如果未能解决你的问题,请参考以下文章
Worklight 在用户注销时保持 HTTP 请求处于活动状态
如果用户在特定时间内不活动,如何使用 codeigniter 自动注销