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

System.Process()带凭据远程执行程序报错求助

排查远程机器以管理员身份运行.NET程序时的“系统找不到指定文件”问题

兄弟,太懂你卡一早上的烦躁了!你说的这个错误在远程执行高权限.NET程序时确实容易踩坑,尤其是纯用.NET命令行编译的场景,我给你列几个大概率能解决问题的排查方向:

  • 绝对路径是底线,别用相对路径
    远程执行进程的工作目录大概率不是你本地的默认目录,哪怕你觉得路径没问题,也一定要写死绝对路径,比如C:\Apps\YourCompiledProgram.exe,别搞.\YourProgram.exe这种操作。另外务必确认远程机器上这个路径下真的有你的程序,拼写、大小写(虽然Windows不敏感,但偶尔会出幺蛾子)都要核对一遍。

  • 管理员权限的上下文坑点
    就算路径对了,管理员身份的进程可能有不同的权限范围。比如你把程序放在了某个普通用户的个人目录(C:\Users\XXX\...),管理员账户未必有访问权限。试试把程序移到公共目录,比如C:\Program Files或者C:\Windows\Temp这种管理员默认有权限的位置再测试。

  • .NET运行时版本必须匹配
    你是用.NET编译的,那远程机器上有没有装对应版本的.NET运行时?比如你本地用.NET 7编译,远程机器只装了.NET Framework 4.7,那程序根本跑不起来,错误提示还会误导你说“找不到文件”。可以在远程机器上跑dotnet --info看看已安装的运行时,和你编译时的目标框架对齐。

  • 远程执行工具的参数要加对
    你是用什么工具远程执行的?比如PsExec的话,要记得加-h参数让进程以高权限运行,命令格式大概是:

    psexec \\RemotePCName -u AdminAccount -p AdminPassword -h "C:\FullPath\YourProgram.exe"
    

    如果程序需要带参数,一定要把整个命令用引号括起来,避免参数被拆分导致识别错误。

  • 编译时生成自包含程序包
    要是不想纠结远程机器的.NET环境,编译的时候直接生成自包含的程序包,这样连运行时一起打包进去,远程机器不用装.NET就能跑。命令大概是:

    dotnet publish -r win-x64 --self-contained true -c Release
    

    把生成的整个文件夹传到远程机器,再执行里面的exe文件试试。

要是这些都试过还是不行,你可以把远程执行的具体命令、编译用的命令行参数贴出来,咱们再接着排查!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:53:22