2016-10-26 5 views
1

У меня есть служба Windows, которая будет работать на клиентском сервере. Эта служба должна получить доступ к двум папкам, которые расположены в разных общих папках (Y: \ и Z: \), которые находятся на разных компьютерах (всего 3 компьютера).Как получить услугу Windows для доступа к общей сетевой папке?

В настоящее время служба может видеть только файлы, расположенные на одной машине. Когда я делаю IO.Directory.Exists() в общих папках, он возвращает false.

Вот вещи, которые я пытался:

  1. Запуск в качестве сетевой службы
  2. Запуск в качестве локальной системы
  3. Запуск в качестве локальной службы
  4. тестирование существования с \\ 192.168.1. xx \ path \ to \ folder
  5. проверка наличия с Y: \ и Z: \
  6. Создание пользователя на других компьютерах с одинаковым именем и паролем d
  7. Проверка папки дал полный доступ к каждому

Ничто еще не работал, любая помощь очень ценится.

+0

Если машины не находятся в домене, лучше всего использовать сервис для явного подключения через WNetAddConnection2 или аналогичный, указав имя пользователя и пароль. –

+0

Я пробовал это сделать и получил эту ошибку: ERROR_NO_SUCH_LOGON_SESSION: Указанный сеанс входа в систему не существует. Возможно, это уже было прекращено. (Код: 1312) – wsnyder

+0

Я видел, что это произошло (в Windows 10), когда имя пользователя не полностью квалифицировано, попробуйте 'SERVERNAME \ USERNAME' (или' DOMAIN \ USERNAME', если это учетная запись домена или если сервер также контроллер домена). –

ответ

0

В среде Active Directory сетевая служба и локальная система имеют сетевой доступ к другим машинам в домене; сервер просто должен быть настроен для предоставления доступа к учетной записи компьютера клиента в домене, то есть учетной записи COMPUTERNAME$. Если вы используете UNC-путь, соединение будет установлено автоматически. Вы все еще не можете использовать буквы дисков, установленные в другом сеансе входа в систему, но в большинстве случаев путь UNC будет работать.

В автономной среде это немного сложнее. Единственный надежный подход заключается в том, чтобы явно установить сетевое соединение, которое вы можете сделать, используя WNetAddConnection2 или любую из различных альтернатив. (Или если вы не можете вызвать Win32 API, вы можете выполнить команду net use.) В любом случае, как только соединение будет установлено, вы можете использовать UNC-путь. Обычно нет необходимости сопоставлять букву диска.

Если у вас должно быть, у вас есть буква с диском по какой-либо причине, обычно лучше использовать функцию WNetUseConnection вместо WNetAddConnection2. Это можно настроить для автоматического выбора буквы диска, поэтому вам не нужно пытаться выяснить, какие буквы уже используются.

Обратите внимание, что в зависимости от обстоятельств может потребоваться использовать длинную форму имени пользователя для учетной записи на сервере, то есть SERVERNAME\USERNAME или DOMAINNAME\USERNAME, если это учетная запись домена. По некоторым причинам клиенты Windows 10 кажутся особенно суетливыми по этому поводу.

Смежные вопросы