You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非管理员权限下NamedPipeClientStream无法连接的问题排查

问题分析与解决方案

核心问题

通过Launcher.exe启动Unity游戏进程后,非管理员权限的Deeplink.exe无法连接游戏创建的命名管道;直接启动游戏则连接正常,修改UseShellExecute=false后仍偶发权限拒绝问题。

问题根源

  1. 管道权限规则不匹配:服务端仅授予Everyone组读取权限,但客户端使用PipeDirection.InOut双向管道,需要读写权限,导致非管理员进程连接时权限不足。
  2. 权限上下文继承问题:当UseShellExecute=true时,Game.exe会继承Launcher的权限上下文(若Launcher以管理员运行,Game.exe会获得高完整性权限),非管理员的Deeplink.exe因权限级别差异被拒绝。
  3. 进程创建方式的不确定性:UseShellExecute=false时,进程权限令牌继承存在偶发异常,导致部分场景下权限校验失败。

修复步骤

1. 修正管道安全规则,匹配双向管道需求

服务端创建管道时,需授予Everyone组读写权限,与客户端的双向访问需求一致:

var pipeSecurity = new PipeSecurity();
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
// 授予读写权限,支持客户端双向管道操作
pipeSecurity.AddAccessRule(new PipeAccessRule(everyone, PipeAccessRights.ReadWrite, AccessControlType.Allow));
                
pipe = new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, 1, 
            PipeTransmissionMode.Message, PipeOptions.Asynchronous, 
            8192, 8192, pipeSecurity);

2. 统一进程权限上下文

  • 若Launcher无需管理员权限,禁止以管理员身份运行Launcher,避免Game.exe继承高完整性权限,导致非管理员Deeplink无法连接。
  • 若必须以管理员身份运行Launcher,需额外添加当前用户的完全访问权限,确保非管理员令牌能访问管道:
// 添加当前用户的完全控制权限,覆盖管理员进程创建管道的权限限制
SecurityIdentifier currentUser = WindowsIdentity.GetCurrent().User;
pipeSecurity.AddAccessRule(new PipeAccessRule(currentUser, PipeAccessRights.FullControl, AccessControlType.Allow));

3. 稳定进程创建方式

保持UseShellExecute=false,让Game.exe直接继承Launcher的权限令牌,避免Shell启动带来的权限上下文波动:

Process process = new();
process.StartInfo.FileName = "/path/to/game.exe";
process.StartInfo.UseShellExecute = false; // 固定为false,确保权限继承稳定
process.StartInfo.CreateNoWindow = false;

process.Start();

4. 补充完整性级别权限(可选)

若仍存在权限问题,可添加中完整性级别访问规则,允许非管理员进程访问高完整性进程创建的管道:

// 允许中完整性级别进程访问管道
var mediumIntegritySid = new SecurityIdentifier(WellKnownSidType.MediumMandatoryLabelSid, null);
pipeSecurity.AddAccessRule(new PipeAccessRule(mediumIntegritySid, PipeAccessRights.ReadWrite, AccessControlType.Allow));

验证流程

  1. 确保Game.exe的管道安全规则已更新为ReadWrite权限。
  2. 以非管理员身份启动Launcher,再启动Game.exe,运行非管理员的Deeplink.exe测试连接。
  3. 若需管理员启动Launcher,验证添加当前用户权限后的连接稳定性。

内容的提问来源于stack exchange,提问作者Marco Vincenzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:40:18