Windows服务跨机访问文件共享报“目录名称无效”问题求助
解决Windows服务跨机文件共享同步时的“目录名称无效”错误
问题背景
开发的Windows服务用于本地文件夹与跨机文件共享(fileshare)同步,本地共享场景运行正常,但跨机部署共享文件夹后抛出“目录名称无效”错误,手动通过快捷方式访问跨机共享无异常。相关代码片段如下:
private readonly string _localFolderPath = @"C:\Users\vernenat\OneDrive\Desktop\localfolder"; private readonly string _fileSharePath = @"\\MyComputerName\fileshare"; private readonly string _logFolderPath = @"C:\Users\vernenat\OneDrive\Desktop\logfolder"; private readonly FileSystemWatcher _localWatcher = new FileSystemWatcher(); private readonly FileSystemWatcher _fileShareWatcher = new FileSystemWatcher(); private static object logFileLock = new object(); public Service1() { InitializeComponent(); } [OperationBehavior(Impersonation = ImpersonationOption.Required)] protected override void OnStart(string[] args) { try { WriteToLogs($"{DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff")} Service was started"); WriteToLogs($"{DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff")} Setting up local folder watcher"); _localWatcher.Path = _localFolderPath; _localWatcher.IncludeSubdirectories = true; _localWatcher.EnableRaisingEvents = true; _localWatcher.Created += OnChangedLocal; WriteToLogs($"{DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss.fff")} Setting up file share folder watcher"); _fileShareWatcher.Path = _fileSharePath; _fileShareWatcher.IncludeSubdirectories = true; _fileShareWatcher.EnableRaisingEvents = true; SyncFilesFromLocal(); SyncFilesFromFileshare(); } catch (Exception ex) { WriteToLogs(ex.ToString()); } }
解决建议
修改服务运行账户:Windows服务默认使用
Local System账户,该账户无网络资源访问权限。需将服务切换到有权限访问目标共享的账户:- 打开
services.msc找到目标服务,右键选择「属性」 - 切换到「登录」选项卡,选择「此账户」,输入具备共享文件夹读写权限的域/本地账户
- 输入账户密码后保存,重启服务
- 打开
验证共享路径与权限:
- 确认
_fileSharePath中的主机名/IP可被本地机器解析(用ping MyComputerName测试),替换为IP地址可避免DNS解析问题 - 检查目标共享文件夹的共享权限和NTFS权限,确保服务运行账户拥有读写权限
- 确认
替换OneDrive路径:代码中本地目录和日志目录使用OneDrive路径,
Local System账户无法访问OneDrive的同步目录,建议更换为普通本地路径(如C:\localfolder)检查SMB相关服务:跨机共享依赖SMB协议,确认目标机器已启动
Server服务(服务器端)或Workstation服务(客户端)
内容的提问来源于stack exchange,提问作者Nataly Verner
相关产品推荐
相关产品推荐

