错误:在mscorlib.dll中发生了类型为“System.UnauthorizedAccessException”的未处理异常。

6

当我尝试将文件复制到特定位置时,出现了崩溃并显示了这个错误。

string startupDirectory = "C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
File.Copy(startupDirectory, "Startup.exe");

我已经在网上阅读并尝试了管理员权限,并创建了一个“app.manifest”文件:

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

我确认在设置中,应用程序清单设置为此文件,但仍然出现相同的错误。

虽然这是一个目录而不是一个文件,但我也尝试了这个:

File.SetAttributes(startupDirectory, FileAttributes.Normal);

这是WinForms,我在Windows 7上使用,但也希望它能在Windows 8+上工作。我该怎么做呢?

提前感谢!


源文件名称是什么?在startupDirectory变量中,你有提到它吗? - Avijit
标题中的“已解决”对任何人都没有帮助。如果您找到了除给定答案之外的解决方案,可以回答自己的问题并将其标记为已接受的答案。这样,遇到相同问题的其他人也会得到帮助。 - mbx
4个回答

3
这个异常是由Windows错误触发的。它没有专门的“这完全没有意义”的错误代码,只会产生一个“拒绝访问”错误代码。这被.NET翻译为UnauthorizedAccessException。
“没有意义”的问题在于您正在尝试使用文件复制方法复制一个目录。目录不是文件。复制目录需要先创建一个新目录,然后复制目录中的所有文件。.NET有一个方法可以做到这一点,大多数C#程序员倾向于认为它是“错误”的命名空间。它是Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory()。
但是你需要更深入地思考这个问题,当然不能把新目录命名为“startup.exe”。可能想要从启动目录复制特定文件,我们无法猜测它可能是什么。

2

尝试

public static void Copy(string sourceFileName, string destFileName);

第一个重载是源,第二个重载是目标,我认为原因可能是这样。

File.Copy("Startup.exe",startupDirectory);

尝试将访问权限设置为“完全控制”,以便为从您正在读取/保存文件的位置的.NET用户。

对于IIS服务器上特定文件的访问被拒绝错误,请按照以下步骤进行操作:

1- Goto to C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup

2- Right click on your file -> Properties -> Pop Up of User properties appears -> click on Security tab-> click on Edit -> select Users-> tick on Allow Full Control -> Click Ok

这肯定会解决访问被拒绝的问题

UnauthorizedAccessException意味着以下三种情况之一:

  • 调用者没有所需的权限。
  • 路径是一个目录。
  • 指定的路径是只读文件。

我对第一个选项感到困惑...第二和第三个选项都没有起作用,而对于第四个选项,我找不到选择IIS_IUSRS的地方。 - Nullone
@Tyler13579 给予用户完全控制。 - Midhun Mundayadan
第二个选项给了我这个错误:“在mscorlib.dll中发生了未处理的类型'System.IO.IOException'”。更多信息:目标文件“C:\Users\Tyler\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”是一个目录,而不是一个文件。 - Nullone
尝试复制文件("Startup.exe", startupDirectory, true); - Midhun Mundayadan
我正在查看网站,会尝试一下。 - Nullone
显示剩余2条评论

1
你可以以管理员权限运行Visual Studio。(假设使用的是Windows7,右键单击开始菜单中的Visual Studio图标,然后点击“以管理员身份运行”)

1

试试这个:

    File.Copy(startupDirectory, "Startup.exe", true);
    File.SetAttributes("Startup.exe", FileAttributes.Normal);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接