Ответ 1
Связанные сетевые диски являются специфичными для пользователя, поэтому, если приложение работает под другим идентификатором, чем пользователь, создавший сопоставленную букву диска (z:), он не будет работать.
Мне нужно создать каталог на подключенном сетевом диске. Я использую код:
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, поэтому он является тем же самым сеансом, что и служба.
Связанные сетевые диски являются специфичными для пользователя, поэтому, если приложение работает под другим идентификатором, чем пользователь, создавший сопоставленную букву диска (z:), он не будет работать.
Исходя из того, что отображаемые буквы дисков не работают, простым решением является набрать полный сетевой путь.
АКА,
Мой диск R:/
был отображен на \\myserver\files\myapp\
Значит вместо, используя
"R:/" + "photos"
использование
"\\myserver\files\myapp\" + "photos"
Учетная запись вашего приложения работает, вероятно, не имеет доступа к подключенному диску. Если это веб-приложение, это определенно будет проблемой... По умолчанию веб-приложение работает под учетной записью NETWORK SERVICE, у которой не было бы настройки подключенных дисков. Попробуйте использовать олицетворение, чтобы узнать, исправляет ли он проблему. Хотя вам, вероятно, нужно найти лучшее решение, а затем использовать олицетворение. Если бы это был я, я бы придерживался пути UNC.
Вы сопоставляете ли вы с теми же учетными данными, что и программа с?
Вы можете попытаться использовать WNetConnection, чтобы разрешить подключенный диск к сетевому пути.
Работаете ли вы на Vista/Server 2k8? Обе эти услуги изоляции в сеансе 0 и первый интерактивный сеанс - это сеанс 1. Там больше информации здесь, при изоляции сеанса. Таким образом, даже если один и тот же пользователь будет использоваться как для службы, так и для интерактивного входа в систему, это будут разные сеансы.
У меня была такая же проблема на Win Server 2012. Отключающий UAC решил ее.