Служба Windows не может скопировать в общую папку - PullRequest
5 голосов
/ 12 мая 2009

У меня есть служба Windows, настроенная на копирование файлов из локального каталога в общую папку samba.

Служба подключается через UNC-путь к серверу (т.е. \ remoteserver \ shareddir).

Я вошел в систему как пользователь, под которым запущена служба, и смог копировать и создавать файлы на общем ресурсе samba, используя путь UNC.

Однако при запуске службы у меня возникают исключения, которые указывают на ошибку входа в систему. Я запустил монитор процессов на этом ящике, наблюдая за службой, и вижу, что он находит путь UNC, но получает ошибку входа при попытке записи в общую папку.

Используется простой ванильный вызов .net System.IO.File.Copy.

Я не понимаю ошибок, так как при входе в систему под одним и тем же пользователем я могу копировать и создавать файлы на общем ресурсе.

Есть идеи?

Редактировать: текст исключения

Ошибка в главном цикле обработки (DoWork ()): ошибка входа: неизвестна имя пользователя или неверный пароль.

System.Exception: ошибка при MyService.ProcessExportTransferfileDirectories и значения: D: \ Export, \ Удаленный_сервер \ 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 голосов
/ 13 мая 2009

В результате возникла проблема с разрешениями - после запуска службы от имени другого пользователя, который был настроен на общем ресурсе samba, он без проблем запустил копирование файлов.

До сих пор не понимаю, почему при использовании другой учетной записи я мог копировать / создавать файлы в общей папке с помощью проводника Windows, но когда служба работала под той же учетной записью, она вообще не могла получить доступ к общей папке: (

2 голосов
/ 12 мая 2009

Я бы рекомендовал сначала подключить диск, а затем скопировать файл на подключенный диск вместо общего ресурса.

Вы можете подключить диск с помощью команды dos net use. Например:

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

Это должно решить любые проблемы со входом.

1 голос
/ 12 мая 2009

Очень полезным инструментом в вашей ситуации является монитор процесса . Просто запустите его от имени администратора и добавьте следующий фильтр:

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

Вы увидите подробную информацию о файлах, которые пытается использовать ваш процесс.

0 голосов
/ 12 мая 2009

Как уже упоминалось, когда я вхожу с тот же аккаунт, что сервис работает как, у меня нет проблем с копированием и создание файлов на общем ресурсе. - Одед 1 минуту назад

Предоставили ли вы учетной записи пользователя, на которой работает служба, разрешения «Вход в систему как служба» в локальной политике безопасности ??

...