繁体   English   中英

System.UnauthorizedAccessException:拒绝访问路径“...”

[英]System.UnauthorizedAccessException: Access to the path "..." is denied

我使用单击一次安装使用 .net 完成了 C# wpf 安装。 一切正常。 然后我有以下代码,它是已安装程序的一部分:

String destinationPath = System.Windows.Forms.Application.StartupPath + "\\" + fileName;
File.Copy(path, destinationPath, true);
this.DialogResult = true;
this.Close();

但我收到此错误:

System.UnauthorizedAccessException: 访问路径 C:\\user\\pc\\appdata\\local\\apps\\2.0....... 被拒绝。

在 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost) at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)

这是权限错误还是我需要调整代码中的某些内容?

令我感到困惑的是,为什么用户能够使用单击一次将程序安装到该目录中而没有任何问题,但将文件上传到该目录却不起作用?

安装应用程序时,安装程​​序通常会要求管理权限。 如果用户选择“是”,则程序将运行并具有比普通用户具有的更多种路径的读写访问权限。 如果情况是安装程序没有要求管理权限,则可能只是ClickOnce在某种提升的权限下自动运行。

我建议您改为写入本地appdata文件夹,但如果您认为您真的想要写入与应用程序完全相同的目录,则必须首先使用管理员权限运行您的应用程序。

要使您的应用程序始终要求管理员权限,您可以修改应用程序的清单文件,并将requestedExecutionLevel标记的level属性设置为requireAdministrator

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

您可以在如何强制我的.NET应用程序以管理员身份运行中阅读更多内容

我正在运行一个生成文件的程序。 目标文件夹是只读的。 它会因错误而崩溃。 使用文件夹属性删除只读属性解决了错误。 希望这可以帮助。

首先,如果需要编写任何数据,则应使用Environment.SpecialFolder枚举。

其次,不要写入部署应用程序的任何文件夹,因为它通常只读取应用程序。 您可能希望写入ApplicationDataLocalApplicationData枚举。

我认为在Windows 8(或7)之后默认限制对%appdata%的访问。 当通过ClickOnce安装应用程序时,可能会提示您授予其更改此计算机的权限 - 是吗?

您可以尝试使用管理员权限运行应用程序作为测试(按住Shift键,右键单击.exe,以管理员身份运行),这可能会解决它,但这不是理想的方法。

而是尝试另一个文件夹,如:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

要么

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments )

哪个应该给你更好的运气。

作为旁注 - 如果您在代码中构建路径,而不是使用

path + "\\" + path + "\\" + filename 

哪个容易出现故障(路径可能已经有一个\\),通常最好使用Path.Combine(..)

String destinationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), fileName);

祝好运!

就我而言,远程服务器正在返回“。” 和“..”当我尝试下载(SFTP)文件并写入我们的本地/网络文件夹时。 我会明确丢弃“。” 和“..”文件名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM