我有一个Windows服务集,用于将文件从本地目录复制到samba共享。
服务通过UNC路径连接到服务器(即\ remoteserver \ shareddir)。
我已经以运行该服务的用户身份登录,并且能够使用UNC路径复制文件并在samba共享上创建文件。
但是,在运行服务时,我会收到io异常,表明存在登录错误。我在那个盒子上运行进程监视器,看着服务,我可以看到它找到UNC路径,但在尝试写入共享时遇到登录错误。
这是使用普通的.net System.IO.File.Copy调用。
我不明白错误,因为当我在同一用户下登录时,我能够在共享上复制和创建文件。
有什么想法吗?
修改:例外文字
主处理循环出错 (DoWork()):登录失败:未知 用户名或密码错误。
System.Exception:错误 MyService.ProcessExportTransferfileDirectories 和值:D:\ Export, \ REMOTESERVER \ intray, D:\ Export \ Archive ---> System.IO.IOException:登录失败: 未知的用户名或密码错误。
在 System.IO .__ Error.WinIOError(的Int32 errorCode,String maybeFullPath)at System.IO .__ Error.WinIOError()at System.IO.File.Move(字符串 sourceFileName,String destFileName)
在 MyService.Consumer.BusinessLogic.WmsFacade.MoveAndArchiveFile(字符串 sourceFolder,String targetFolder, String archiveFolder,String rootFolder,LogCategory logCategory, LogCounter logCounter)---结束 内部异常堆栈跟踪--- at MyService.Consumer.BusinessLogic.WmsFacade.MoveAndArchiveFile(字符串 sourceFolder,String targetFolder, String archiveFolder,String rootFolder,LogCategory logCategory, LogCounter logCounter)at MyService.Consumer.BusinessLogic.WmsFacade.ProcessExportTransfer(IDictionary`2 fileDirectories)at MyService.Core.TimedWorkerProvider.DoWork()
答案 0 :(得分:4)
最终成为权限问题 - 在将服务作为在samba共享上设置的其他用户运行后,它运行时没有问题,复制文件。
仍然不明白为什么当使用不同的帐户时,我可以使用Windows资源管理器在共享上复制/创建文件,但是当服务在同一帐户下运行时,它根本无法访问共享:(
答案 1 :(得分:2)
我建议首先映射驱动器,然后将文件复制到映射驱动器而不是共享。
您可以使用dos net use命令映射驱动器。例如:
System.Diagnostics.Process.Start("net", "use h: \remoteserver\shareddir /User:domian\me password")
这可以解决任何登录问题。
答案 2 :(得分:1)
在你的情况下,一个非常有用的工具是process monitor。只需以管理员身份运行它并添加以下过滤器:
Process Name is "your_process.exe" AND Operation is "CreateFile"
您将看到有关您的流程尝试使用的文件的详细信息。
答案 3 :(得分:0)
如上所述,当我登录时 与该服务相同的帐户 运行,我没有问题复制 在共享上创建文件。 - Oded 1分钟前
您是否在本地安全策略中将服务正在运行的用户帐户授予“以服务登录”权限?