Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка Directory.CreateDirectory с путем UNC

Автор вопроса: stackoverflowuserОтветов: 2

У меня есть служба Windows, работающая под определенной учетной записью. Служба создает папку по заданному пути и позже записывает сообщения в эту папку.

Настроенный путь является путем UNC, но был сопоставлен. Когда я развертываю службу на тестовом сервере, я получаю сообщение об ошибке - "не удалось найти часть пути 'Z:\<some folder>'.

Итак, чтобы быть ясным

Server1 - server on which service is insalled and running under `<Domain1>\<User1>` account
Server2 - \\Server2\LogMessages

<Domain1>\<User1> account has full permissions on \\Server2\LogMessages.
Also \\Server2\LogMessages path has been mapped to "Z:\" on Server1.

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

Thread.CurrentPrincipal.Identity.Name

Идентификационное имя потока возвращено пустым. Я думал, что это должна быть учетная запись, под которой работает служба Windows (в данном случае "Domain1\User1").

Я в замешательстве и мне нужна помощь, чтобы понять, что происходит. Спасибо.

  • Вы должны установить принципала потока при его создании в некоторых случаях. См. stackoverflow.com /questions/6699440/ для примера. Это помогает? dash 22.02.2012
  • Когда вы смотрите на диспетчер задач, показывает ли он, что ваша служба работает под указанной учетной записью (учетной записью, которая сопоставила диск)? Есть разрешения SHARE и разрешения NTFS. Убедитесь, что у вас установлены оба. Tung 22.02.2012

file-iowindows-servicesdirectory

Ответы

Ответ 1 · Mudx

Служба работает под определенным пользователем (службы или система), а не под конкретным пользователем. Это распространенная ошибка, так как кажется, что служба работает под определенным пользователем (тот, который ее запустил) Z: отображается в определенной учетной записи пользователя, и служба не может его видеть. Я предлагаю использовать абсолютные пути или общаться через файловую систему или Tcp/IP.

Ответ 2 · Tung

Как отметил @Mudx, на самом деле это не проблема с путями UNC, а проблема с привязанными к учетной записи подключенными дисками. Сопоставление сохраняется в кусте реестра вашего пользователя. Альтернативой тому, чтобы полагаться на подключенный диск, является чтение вашей службой файла конфигурации, чтобы определить, где она должна вести журнал. Это может быть простой файл с одним вкладышем, или вы можете добавить свойство в свой файл service.exe.config или создать файл xml, который впоследствии можно будет использовать для настройки других свойств для вашей службы в будущем.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы