Windows服务无法复制到文件共享

时间:2009-05-12 19:16:38

标签: .net file-io windows-services networking samba

我有一个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()

4 个答案:

答案 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分钟前

您是否在本地安全策略中将服务正在运行的用户帐户授予“以服务登录”权限?