使用 C# 创建目录时访问被拒绝

Posted

技术标签:

【中文标题】使用 C# 创建目录时访问被拒绝【英文标题】:Access Denied in creating directory using C# 【发布时间】:2011-09-27 14:38:46 【问题描述】:
string windowsDirectory = Environment.GetEnvironmentVariable("ProgramFiles");
string mydirecoty = windowsDirectory + "\\" + "NetServices\\";

if (!Directory.Exists(mydirecoty))
  
    Directory.CreateDirectory(mydirecoty); //Access to the path 'C:\Program Files (x86)\NetServices\' is denied.
  

当我在没有管理员帐户的情况下运行我的 .net 应用程序时引发异常。如果我尝试在其他 C:\ 驱动器中创建目录,例如 D:\,它运行良好。

我想在Program Files/ Windows 文件夹中创建目录的解决方案是什么?

【问题讨论】:

这是一个基于 Web 的应用程序、Windows 服务、可执行还是计划任务? 请使用异常的详细信息编辑您的问题,在您的代码中,您至少应该对代码进行尝试/捕获。它在 Windows 7 上运行吗?您是否 100% 确定您是管理员并且 UAC 已禁用?通常,除非您正在安装应用程序,否则不应在该位置创建子文件夹,但通常由安装程序完成。 您可以强制您的应用程序以管理员身份运行:***.com/questions/2818179/… @lovecomputerscience - 这不是字典,而是目录。 我建议你完全避免在其中创建文件夹:) 【参考方案1】:

C:\program files 文件夹在 Vista 和 Windows 7(以及 Windows Server 2008 / 2008 R2)中受到保护(设计) - 普通用户帐户无权在其中创建目录 -这是一个系统文件夹。

您需要以 admin 身份运行 - 然后您有权在受保护的系统文件夹中创建目录 - 或者您在其他位置而不是在受保护的系统文件夹中创建目录。第二个选项将是推荐和首选的选项。

【讨论】:

【参考方案2】:

如果您的应用程序旨在由用户运行,请写入用户的应用程序数据文件夹或临时文件夹。您的应用程序应该安装到 Program Files 目录,并且可能使用 Windows 目录中的一些文件,但它永远不必写入任一位置。 您可以轻松地从环境变量中获取用户的应用程序 daa 文件夹。

【讨论】:

【参考方案3】:

如果您从 Web 应用程序运行它,请确保应用程序池用户具有该文件夹的 ntfs 权限。

【讨论】:

【参考方案4】:

您需要提升用户权限,因为它是 windows vista/7 中的一项功能。 以管理员身份运行将解决问题。

【讨论】:

【参考方案5】:

如果您使用高于 Windows XP 的操作系统,您将无法访问 C:\PrpgramFiles 因为读写而受到保护,除非 AVII 您的应用程序具有管理员权限。

再见

【讨论】:

以上是关于使用 C# 创建目录时访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Directory.Exists - 访问被拒绝 C# 的 UNC 路径

为啥当我尝试移动目录时访问被拒绝?

“访问路径......被拒绝”(.NET C#)

访问路径被拒绝 - C# Directory.Move

C# - 尝试获取进程句柄时访问被拒绝

Sonarqube C# MsBuild 访问被拒绝