我正在Windows 7上編寫一個小型.NET程序。它需要做的一件事是創建符號鏈接,這似乎要求我具有管理員權限。它還需要能夠使用映射網絡驅動器(例如,R:\,在我的系統上映射到\\titanium\Private\
)。.NET Directory.Exists在以管理員身份運行時拒絕映射網絡驅動器的存在
我使用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提示)。
投票結束,作爲題外話題。這裏的問題是UAC(並且UAC用戶與非UAC用戶不在同一個會話中),並且它與編程無關。 – Lucero
我認爲這是非常重要的話題,作爲一名程序員,如果最終用戶決定提升您的程序,您需要避免發生的問題。 –
我同意斯科特。這是一個常見的編程問題,在我看來這是一個很棒的網站。 –