1

我正在使用 QWINSTA.EXE 从我们网络上的终端服务器获取会话/用户列表(我的计算机是 Windows 7 Pro,TS 是 Windows Server 2003)。我将此函数的输出通过管道传输到一个文本文件,然后处理该文本文件以获取我需要的信息。如果有更好的方法,请原谅并跳过我冗长的帖子,并指出我正确的方向。

我的问题是,在ShellExecute()没有ShellExecuteEx()首先提升权限的情况下,我什至不允许我执行该程序。如果您转到未提升的命令提示符,您甚至不会在目录列表中看到 EXE(也没有隐藏属性)。使用“以管理员身份运行”命令提示符,您可以很好地查看/使用它。无论如何,您都可以从 Windows 资源管理器中看到它。

我摸索了一下,发现了这个宝石:RunFileAsAdminWait()如果我尝试直接调用 QWINSTA.EXE 则不起作用(它会失败并显示错误消息:)System Error. Code: 2. The system cannot find the file specified.。如果我将所有内容打包成一个批处理文件并RunFileAsAdminWait()在批处理文件上使用,那么它似乎工作正常。

我知道,但没用过,WTSEnumerateSessions(). 除了我刚刚链接到的 MSDN 链接之外,我找不到太多关于它的信息。任何人都知道使用 Delphi 的 API 的大量参考代码吗?它在 Delphi 2007 的 Windows 单元中不可用。

问题:

  1. 是否有另一种/更好的方法来执行需要管理员权限才能访问的 EXE?或者这就是这里发生的事情?

  2. 有没有更好的方法来获取终端服务器上的活动会话列表,尤其是不需要提升权限的会话?

  3. 如果我坚持使用这种方法,我是否以“正确的方式”进行操作?

感谢您提供的任何帮助!

4

1 回答 1

6

而不是管道结果,QWINSTA.EXE您必须使用 Remote Desktop Services API Functions该 API 的 delphi 翻译检查作为JwsclTerminalServerJEDI Windows 安全代码库 (JWSCL) 一部分的单元。在您枚举终端服务器的情况下,您可以使用TJwTerminalServer.EnumerateSessions方法。

于 2011-11-17T21:28:35.967 回答