我正在使用 psexec 运行一个远程脚本,该脚本对远程系统中存在的打印对象执行一些 UI 操作。具体来说,使用的 API 是 SHInvokePrinterCommand() 来调用打印机对象的打印机属性。
当用户在 Windows 7 上登录(因此可见桌面)执行时,整个事情工作正常。但是当没有用户登录时,该过程无法工作,API(SHInvokePrinterCommand)成功返回但它没有似乎做任何工作。WINDOWS XP 在类似条件下,WORKS FINE。
该观察使我相信它与这些操作系统中不同的会话和“窗口站”架构有关。通过远程进程中的一些编码,我能够确定远程进程是由 psexec 在非零会话(会话 2)中启动的,并且它所连接的唯一窗口站是“WinSta0”。(我使用了 EnumWindowStations( ) 为了那个原因)。WinSta0 是唯一接收来自键盘、鼠标等输入的 Windows 站。
有了这么多的观察,我不明白是什么让整个事情在 Windows 7 的情况下不起作用,没有登录。基本上打印机的属性页面在这种情况下实际上没有被调用。用于执行远程进程的 psexec 形成的会话是否以某种方式不是“完整”会话?有什么办法可以解决这个问题?
任何想法或建议都非常受欢迎。