.NET Directory.Exists отрицает существование подключенного сетевого диска при работе от имени администратора - PullRequest
8 голосов
/ 24 июля 2011

Я пишу небольшую программу .NET для Windows 7. Одна вещь, которую нужно сделать, это создать символические ссылки, которые, как мне кажется, требуют от меня прав администратора.Он также должен иметь возможность работать с подключенными сетевыми дисками (например, R: \, который в моей системе соответствует \\titanium\Private\).

Я использую Directory.Exists(path), чтобы проверить, существует ли путь.

При запуске программы от имени обычного пользователя (учетная запись администратора, но не «от имени администратора») это нормально работает на подключенном сетевом диске.

При запуске программы от имени администратора (с UAC), он не может найти существующие каталоги.В результате программа отказывается признать, что R:\Steam Games\ - это каталог, который действительно существует.

Я немного сбит с толку относительно того, почему это происходит.Использование полного пути UNC (\\titanium\Private\Steam Games\) также не работает.

Кто-нибудь сталкивался с этим раньше?Есть ли хороший обходной путь?Нужно ли форматировать пути по-разному (заметьте: большинство из них в настоящее время отформатированы с Path.Combine, поэтому они должны быть правильными).

Спасибо за вашу помощь.

(Например, Directory.Exists(@"R:\Steam Games\") возвращает false при запуске от имени администратора, но эта папка существует. Вызов функции правильно возвращает true при регулярном запуске).

Редактировать: Проблема действительно заключается в том, чтоАдминистратор технически другой учетной записи пользователя.Я даже не мог использовать UNC-пути, потому что я вошел на свой файловый сервер только под моим обычным пользователем, а не под «Администратором».В качестве (относительно хакерского) обходного пути я просто запускаю свою программу с обычными привилегиями и затем использую Process.Start, чтобы вызвать экземпляр cmd.exe с аргументами для создания символической ссылки (и глагол «runas», чтобы получить приглашение UAC).

Ответы [ 3 ]

7 голосов
/ 24 июля 2011

Подключенные диски в окнах привязаны к пользовательскому контексту.Диск, сопоставленный с учетной записью: UserA, не будет доступен для UserB.Вы можете создать один и тот же путь unc, сопоставленный с одной и той же буквой диска для разных пользователей.

Использование полного пути unc должно работать, хотя.

Дополнительная информация на support.microsoft.com: 1 , 2 .

1 голос
/ 23 июня 2014

Основная причина, по которой он не работает, заключается в том, что у пользователя IIS нет прав доступа к пути. При работе в качестве обычного пользователя доступ предоставляется пользователю, т. Е. Для его работы необходимо дать разрешение на папку для IIS Следуйте указаниям ниже, чтобы UNC-путь работал в службах, запущенных iis:

Свойства -> Безопасность -> Редактировать -> Добавить -> IIS_WPG

1 голос
/ 17 августа 2011

Это обсуждалось здесь . Очевидно, в более ранних версиях .Net Framework в документации прямо упоминалось, что это невозможно («Метод Exists не выполняет сетевую аутентификацию. Если вы запрашиваете существующий сетевой ресурс без предварительной аутентификации, Метод Exists вернет false. "). Документация 4.0 больше не содержит это предложение, но поведение не изменилось.

Я нашел обходной путь здесь (но решил не использовать его).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...