讲师中心 微信公众号
AI工具推荐 视频效率加速

C# 操作Samba/CIFS C#如何以编程方式访问Windows网络共享

秋磊酱_5468

秋磊酱_5468

发布时间:2026-02-24 11:47:02

|

937人浏览过

|

来源于php中文网

原创

System.IO 直接访问 UNC 路径失败主因是 SMB 认证不透明,建议用 WNetAddConnection2 显式挂载并配对 WNetCancelConnection2 清理,避免凭据冲突或残留。

c# 操作samba/cifs c#如何以编程方式访问windows网络共享

为什么 System.IO 直接访问 \servershare 有时失败?

因为 Windows 网络共享(Samba/CIFS)的认证和会话管理不透明,System.IO 的 File.Exists、Directory.GetFiles 等方法底层依赖系统级 SMB 会话。一旦当前登录用户没权限、凭据缓存过期、或目标共享启用了“仅限 Kerberos”策略,就会静默失败或抛出 UnauthorizedAccessException 或 IOException。

常见错误现象:

  • UnauthorizedAccessException:即使手动能打开资源管理器访问,代码却报错
  • IOException:“网络路径不存在”——实际存在,但未建立有效会话
  • 首次调用慢、后续快:系统在后台做 NTLM 协商,不可控

实操建议:

  • 不要依赖 System.IO 做连接性判断,它不暴露认证过程
  • 用 WNetAddConnection2(Windows API)显式挂载映射盘符,再操作 Z: 路径,控制力更强
  • 挂载前确保目标服务器支持 SMBv2/v3(Win10+/Server 2016 默认禁用 SMBv1),否则连接直接被拒

如何用 WNetAddConnection2 安全建立 CIFS 连接?

这是最稳定、兼容性最好的方式,绕过 .NET 对网络路径的黑盒处理,把认证逻辑收归自己手上。

关键点:

  • 必须 P/Invoke WNetAddConnection2,参数中 dwFlags 设为 CONNECT_UPDATE_PROFILE 才会持久化凭据(可选),设为 0 则只本次进程有效
  • lpRemoteName 必须是 UNC 格式:"\\server\share"(注意双反斜杠转义)
  • 用户名要带域前缀:"DOMAIN\user" 或 "user@domain.com";纯用户名在跨域时大概率失败
  • 调用后务必检查返回值:0 成功,非 0 查 netapi32.dll 错误码(如 1219 表示已有同名连接)

简短示例(省略 DllImport 声明):

直播间话术巡检-windows
直播间话术巡检-windows

直播话术巡检系统(Windows版) — 实时语音转写、关键词检测、场景自动切换、告警推送、大屏可视化。支持 Windows VB-Cable 虚拟声卡音频采集,阿里云 ASR 实时识别。一键启动脚本,自动安装环境。

下载
var result = WNetAddConnection2(
    ref netResource,
    "password",
    "DOMAIN\user",
    0
);
if (result != 0) {
    throw new InvalidOperationException($"WNet failed: {result}");
}
// 后续可用 File.Copy(@"Z:ile.txt", @"C:local.txt");

.NET 6+ 能否不用 P/Invoke?NetworkCredential 和 SmbClient 可靠吗?

不能。.NET 原生库至今(包括 .NET 8)**没有内置 Samba/CIFS 客户端实现**。NetworkCredential 只是凭据容器,本身不发起连接;SmbClient 是社区项目(如 SharpCifs),不是微软官方组件,且多数已停止维护或仅支持 SMBv1(不安全、Win10+ 默认禁用)。

现状:

  • System.Net.Http、System.Net.Sockets 都无法直连 SMB 协议——它不是 HTTP,也不是裸 TCP
  • 第三方库如 LibSmb2(C# 封装)依赖 native dll,部署复杂,Linux/macOS 兼容性差
  • 若目标是 Linux Samba 服务,务必确认其 smb.conf 中 server min protocol = SMB2,否则 .NET 进程可能协商失败

所以:Windows 平台优先用 WNetAddConnection2;跨平台需求强烈时,改用 WebDAV(需服务端配合)或 SSH/SFTP(需开启 OpenSSH Server),而非硬啃 SMB。

挂载后如何清理、避免残留连接?

每次成功调用 WNetAddConnection2 后,必须配对调用 WNetCancelConnection2,否则连接会滞留在系统会话中,下次挂载同名资源时可能复用旧凭据导致权限错乱,或触发 ERROR_SESSION_CREDENTIAL_CONFLICT(错误码 1219)。

实操要点:

  • 用 try/finally 或 using(封装成 IDisposable 类)确保取消调用执行
  • WNetCancelConnection2 的 dwFlags 若设为 CONNECT_UPDATE_PROFILE,会同时删注册表凭据缓存
  • 测试时别用 net use * 手动删映射——它可能删掉别人正在用的连接,应指定盘符:net use Z: /delete
  • 进程崩溃时连接不会自动释放,需在服务场景加全局异常钩子兜底

真正麻烦的从来不是第一次连上,而是连上之后忘了断、断得不干净、或者断了又立刻重连触发 Windows 凭据锁死——这些细节比协议本身更耗时间。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

3131

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

945

2023.12.29

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3279

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2858

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

1508

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2619

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3310

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1637

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

40

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Conan 2 安装指南
Conan 2 安装指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn