2012-11-16 82 views
2

當我嘗試使用Directory.GetDirectories(systemVolumePath)訪問系統卷時,我的應用程序拋出UnauthorizedAccessException。精細。我在這裏看到了所有使用try catch的答案 - 這不是我所追求的。C#Directory.GetDirectories - 如何解決UnauthorizedAccessException?

我怎麼能說確實有足夠的權限來訪問所有文件夾的帳戶下運行我的應用程序?

謝謝

+0

可能重複[使用System.IO.SearchOption.AllDirectories時出錯](http://stackoverflow.com/questions/5764351/error-when-using-system-io-searchoption-alldirectories) –

回答

0

我已成功使用runas.exe工具來執行此操作。

runas.exe /savecred /user:yourusernamehere my_app_that_needs_permissions.exe 

這將運行在當前的桌面環境中的應用,但與其他用戶的個人資料和權限,所以文件訪問(包括創建文件)將與用戶憑據發生。

的一個有趣的sideeffect是會隨着其他用戶作爲所有者創建您的應用程序創建的文件,你的當前用戶可能沒有所需的權限來訪問它們。

它是一個有趣的小短途下來了世界的多用戶環境。

如果你是一個方法,從自己的代碼,這樣做後,這些所謂的帖子似乎掩蓋它:

Launch a process under another user's credentials

Using Process.Start() to start a process as a different user from within a Windows Service

0

據我所知,你不能'解決方法'的安全性。你可以做什麼,需要權限。

必須從用戶需要提升,讓你的代碼與所要求的權限運行。

在.NET中,你可以做到這一點使用Declarative Syntax,或Imperative Syntax

下面是微軟的例子有必要的語法需要獲得許可到一個文件夾:

FileIOPermission permFileIO = 
new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\\Temp"); 
try 
{ 
    // Demand the permission to access the C:\Temp folder. 
    permFileIO.Demand(); 
    resultText.Append("The demand for permission to access the C:\\Temp folder succeeded.\n\n"); 
} 
catch (SecurityException se) 
{ 
    resultText.Append("The demand for permission to access the C:\\Temp folder failed.\nException message: "); 
    resultText.Append(se.Message); 
    resultText.Append("\n\n"); 
} 
0

要訪問那些你需要的本地系統帳戶是不是你應該輕輕考慮下運行目錄。

PSExec將幫助你實現你所需要的,如果它是適合您的使用場景。