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

.NET C#服务调用System.Diagnostics.Process无法访问共享盘符问题求助

问题根因

该问题和C# Process逻辑、Python代码无关,是Windows服务的固有特性导致:

  • 网络盘符映射是用户会话级别的,你当前登录用户挂载的Z盘仅在当前用户会话生效,Windows服务默认运行在独立的Session 0会话,无法识别普通用户挂载的盘符
  • 服务默认使用的LocalSystem、NetworkService等内置账户,默认没有网络共享资源的访问权限,就算传入路径也无法正常访问

可行解决方法

方法一:修改服务运行账户(最简单快捷)

  • 打开服务管理器(按Win+R输入services.msc回车),找到你部署的服务,右键选择「属性」→「登录」选项卡
  • 勾选「此账户」,输入你日常登录系统、可正常访问Z盘的用户名和密码,点击确认后重启服务即可

方法二:替换盘符为UNC路径

  • 首先查询Z盘对应的UNC路径:打开CMD执行命令net use Z:,即可获取Z盘映射的完整共享路径,格式类似\\192.168.x.x\共享文件夹名
  • 将代码中传入的Iblur_dir参数的盘符前缀替换为UNC路径,例如将Z:\2021-08-18\14替换为\\192.168.x.x\共享文件夹名\2021-08-18\14
  • 该方法需配合方法一使用,保证服务运行账户有权限访问对应共享路径

方法三:服务内主动挂载网络盘符

如果业务必须使用Z盘盘符,可在调用Python exe之前,先通过代码执行网络映射命令挂载Z盘,示例逻辑如下:

// 先挂载Z盘
Process mapProcess = new Process();
mapProcess.StartInfo.FileName = "net.exe";
// 替换为实际的共享路径、访问用户名和密码
mapProcess.StartInfo.Arguments = @"use Z: \\192.168.x.x\共享文件夹 密码 /user:用户名 /persistent:no";
mapProcess.StartInfo.UseShellExecute = false;
mapProcess.StartInfo.CreateNoWindow = true;
mapProcess.Start();
mapProcess.WaitForExit();

// 挂载完成后再执行原有的调用Python exe的逻辑

额外排查点

如果使用域环境共享,确认服务运行账户属于有权限访问共享资源的域用户组;测试阶段可临时关闭共享端的密码保护共享,排除权限验证问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:57:03