2012-11-16 37 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将帮助你实现你所需要的,如果它是适合您的使用场景。