Я пишу небольшую .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).