使用说明
会话启动器
A.NET 8 Windows控制台实用程序,在特定的Windows RDSH(远程桌面会话主机)用户会话中启动可执行文件。由注册表用于在隔离的用户会话中运行桌面代理和MCP工具,以实现并行自动化。
项目结构
SessionLauncher/
├── SessionLauncher.csproj # .NET 8 Windows console project
├── Program.cs # Entry point — session lookup + process launch
└── publish/ # Self-contained build output
└── SessionLauncher.exe
运作原理
- 接受
--user,--exe,以及--args作为命令行参数 - 呼叫
WTSEnumerateSessions列出所有活动的Windows会话 - 通过匹配属于目标用户名的会话
WTSQuerySessionInformation - 通过获取该会话的用户令牌
WTSQueryUserToken - 通过以下方式在该会话中启动可执行文件
CreateProcessAsUser
这确保了每个进程都在其自己的隔离的Windows桌面会话中运行——记事本和其他UI自动化在该用户的会话中不可见地发生,而不是在管理会话中。
日志记录到: C:\agents\SessionLauncher\launcher.log
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 缺失 --user 或 --exe 论点 |
| 2 | 未找到指定用户的活动会话 |
| 3 | CreateProcessAsUser 失败 |
使用的Win32 API
| API | 目的 |
|---|---|
WTSEnumerateSessions |
列出所有活动的Windows会话 |
WTSQuerySessionInformation |
获取会话的用户名 |
WTSQueryUserToken |
获取会话的模拟令牌 |
CreateProcessAsUser |
目标会话中的启动过程 |
ShowWindow / SetForegroundWindow |
(参考上下文) |
构建
cd D:\VisualStudioWrkSpce\2022\SessionLauncher\SessionLauncher
dotnet publish -c Release -r win-x64 --self-contained true -o ./publish
输出: ./publish/SessionLauncher.exe
需要
net8.0-windows目标框架。
跑
# Launch an exe in a specific user session
SessionLauncher.exe --user agent_user_1 --exe "C:\agents\desktop_agent\desktop_agent.exe" --args "--port 8001 --mcp-url http://localhost:5001"
# Launch MCP tool in a specific user session
SessionLauncher.exe --user agent_user_1 --exe "C:\agents\GoogleSearchMcp\GoogleSearchMcp.exe" --args "--urls http://localhost:5001"
先决条件: 目标用户必须在计算机上具有活动的RDP会话。如果会话未处于活动状态,则返回退出代码2。
部署到服务器
复制整个 publish\ 文件夹到:
C:\agents\SessionLauncher\
创建日志目录:
New-Item -ItemType Directory -Force -Path C:\agents\SessionLauncher
服务器上的先决条件
- 启用RDSH角色的Windows Server 2022
- 用户
agent_user_1,agent_user_2,agent_user_3已创建并添加到“远程桌面用户”组 - 在注册表启动之前,所有3个用户都必须具有活动的RDP会话
- 注册表必须以管理员身份运行(需要
WTSQueryUserToken)
验证活动会话
query session
预期产量:
SESSIONNAME USERNAME ID STATE
rdp-tcp#0 agent_user_1 2 Active
rdp-tcp#1 agent_user_2 3 Active
rdp-tcp#2 agent_user_3 4 Active