Как получить доступ к подключенному сетевому диску с помощью System.IO.DirectoryInfo?

Мне нужно создать каталог на подключенном сетевом диске. Я использую код:

DirectoryInfo targetDirectory = new DirectoryInfo(path);
if (targetDirectory != null)
{
    targetDirectory.Create();
}

Если я укажу путь как "\\\\ имя_сервера\\Directory", все будет хорошо. Если я сопоставляю "\\ ServerName\Directory" как, скажем, диск Z:, и укажу путь, подобный "Z: \\", он терпит неудачу.

После создания объекта targetDirectory VS показывает (в режиме отладки), что targetDirectory.Exists = false, и пытается сделать targetDirectory.Create() выдает исключение:

System.IO.DirectoryNotFoundException: "Could not find a part of the path 'Z:\'."

Однако тот же код хорошо работает с локальными каталогами, например. С:.

Приложение - это служба Windows (WinXP Pro, SP2,.NET 2), работающая под той же учетной записью, что и пользователь, который сопоставил диск. Qwinsta отвечает, что сеанс пользователя - это сеанс 0, поэтому он является тем же самым сеансом, что и служба.

Ответ 1

Связанные сетевые диски являются специфичными для пользователя, поэтому, если приложение работает под другим идентификатором, чем пользователь, создавший сопоставленную букву диска (z:), он не будет работать.

Ответ 2

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

АКА,

Мой диск R:/ был отображен на \\myserver\files\myapp\

Значит вместо, используя

"R:/" + "photos"

использование

"\\myserver\files\myapp\" + "photos"

Ответ 3

Учетная запись вашего приложения работает, вероятно, не имеет доступа к подключенному диску. Если это веб-приложение, это определенно будет проблемой... По умолчанию веб-приложение работает под учетной записью NETWORK SERVICE, у которой не было бы настройки подключенных дисков. Попробуйте использовать олицетворение, чтобы узнать, исправляет ли он проблему. Хотя вам, вероятно, нужно найти лучшее решение, а затем использовать олицетворение. Если бы это был я, я бы придерживался пути UNC.

Ответ 4

Вы сопоставляете ли вы с теми же учетными данными, что и программа с?

Ответ 5

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

Ответ 6

Работаете ли вы на Vista/Server 2k8? Обе эти услуги изоляции в сеансе 0 и первый интерактивный сеанс - это сеанс 1. Там больше информации здесь, при изоляции сеанса. Таким образом, даже если один и тот же пользователь будет использоваться как для службы, так и для интерактивного входа в систему, это будут разные сеансы.

Ответ 7

У меня была такая же проблема на Win Server 2012. Отключающий UAC решил ее.