枚举Windows 7上Delphi 2007中的终端服务会话

枚举Windows 7上Delphi 2007中的终端服务会话,delphi,windows-7,delphi-2007,terminal-services,Delphi,Windows 7,Delphi 2007,Terminal Services,我正在使用QWINSTA.EXE从网络上的终端服务器获取会话/用户列表(我的计算机是Windows 7 Pro,TS是Windows server 2003)。我通过管道将此函数的输出传输到一个文本文件,然后处理该文本文件以获取所需的信息。如果有更好的方法,请原谅,跳过我冗长的帖子,为我指出正确的方向 我的问题是,无论是ShellExecute()还是ShellExecuteEx()都不允许我在没有提升权限的情况下执行程序。如果转到未提升的命令提示符,您甚至不会在目录列表中看到EXE(也没有隐藏

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

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

我翻了一下,发现这个gem:如果我试图直接调用QWINSTA.EXE,它就不起作用了(它失败了,错误消息是:
System error.code:2.系统找不到指定的文件。
)。如果我将所有内容包装到一个批处理文件中,并在批处理文件上使用
runfileasadmin()

我知道,但没有用过。除了刚才链接到的MSDN链接外,我还没有找到更多关于它的信息。有人知道使用Delphi API的一大块参考代码吗?它在Delphi2007的Windows单元中不可用

问题:

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

  • 是否有更好的方法获取终端服务器上的活动会话列表,特别是不需要提升权限的会话列表

  • 如果我坚持使用这种方法,我是不是“正确的方法”


  • 谢谢你能提供的任何帮助

    您必须使用该API的delphi翻译来检查作为绝地Windows安全代码库(JWSCL)一部分的单元,而不是管道传输QWINSTA.EXE的结果。在枚举终端服务器的情况下,请参见,您可以使用该方法。

    而不是管道传输
    QWINSTA.EXE
    的结果。您必须使用此API的delphi翻译检查作为绝地Windows安全代码库(JWSCL)一部分的单元。对于枚举终端服务器,请参见您可以使用的方法。

    让我看看是否有这一点。您希望在不引发UAC对话框的情况下运行需要提升的进程。唯一的方法是启动提升的进程,以便它启动的进程继承提升的标记。@David-我可能不应该这样做,但这是我第一次遇到这样的情况:在资源管理器中可以看到文件,但在使用ShellExecute()时找不到文件甚至可以从非提升的命令提示符查看。我不确定我是否从一开始就做错了导致需要UAC的事情。让我看看我是否有正确的解释。您希望在不引发UAC对话框的情况下运行需要提升的进程。唯一的方法是启动提升的进程,以便它启动的进程继承提升的标记。@David-我可能不应该这样做,但这是我第一次遇到这样的情况:在资源管理器中可以看到文件,但在使用ShellExecute()时找不到文件甚至可以从非提升的命令提示符查看。我不确定从一开始我是否做错了什么导致了对UAC的需求。绝地JWSCL有一大堆很酷的功能。如果WMI也提供了查询终端服务器会话的方法,我不会感到惊讶。@WarrenP,WMI在
    root\CIMV2\TerminalServices
    命名空间中有一整套类来访问终端服务,但不幸的是,没有关于这些类的正式文档。因为我刚才在回答中提到了终端服务API:)Jedi JWSCL有一大堆很酷的功能。如果WMI也提供了查询终端服务器会话的方法,我不会感到惊讶。@WarrenP,WMI在
    root\CIMV2\TerminalServices
    命名空间中有一整套类来访问终端服务,但不幸的是,没有关于这些类的正式文档。因为我刚才在回答中提到了终端服务API:)