Пиша малка .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 подканата).