5

我有一个 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) 在 System.IO.__Error.WinIOError() 在 System.IO.File.Move(String sourceFileName, String destFileName)
在 MyService.Consumer.BusinessLogic.WmsFacade.MoveAndArchiveFile (String sourceFolder, String targetFolder, String archiveFolder, String rootFolder, LogCategory logCategory, LogCounter logCounter) --- 内部异常堆栈跟踪结束 --- 在 MyService.Consumer.BusinessLogic.WmsFacade.MoveAndArchiveFile(String sourceFolder, String targetFolder, String archiveFolder , String rootFolder, LogCategory logCategory, LogCounter logCounter) 在 MyService.Consumer.BusinessLogic.WmsFacade.ProcessExportTransfer(IDictionary`2 fileDirectories) 在 MyService.Core.TimedWorkerProvider.DoWork()

4

4 回答 4

4

它最终成为一个权限问题 - 在作为在 samba 共享上设置的不同用户运行服务后,它运行没有问题,复制文件。

仍然不明白为什么当使用不同的帐户时,我可以使用 Windows 资源管理器在共享上复制/创建文件,但是当服务在同一帐户下运行时,它根本无法访问共享:(

于 2009-05-13T18:22:07.443 回答
2

我建议先映射一个驱动器,然后将文件复制到映射的驱动器而不是共享。

您可以使用 dos net use 命令映射驱动器。例如:

System.Diagnostics.Process.Start("net", "use h: \remoteserver\shareddir /User:domian\me password")

这应该可以解决任何登录问题。

于 2009-05-12T19:43:01.363 回答
1

在您的情况下,一个非常有用的工具是process monitor。只需以管理员身份运行它并添加以下过滤器:

Process Name is "your_process.exe" AND Operation is "CreateFile"

您将看到有关您的进程尝试使用的文件的详细信息。

于 2009-05-12T19:40:54.347 回答
0

如前所述,当我使用运行该服务的同一帐户登录时,我可以毫无问题地复制到共享并在共享上创建文件。– Oded 1 分钟前

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

于 2009-05-12T19:44:51.280 回答