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

问题描述 投票:0回答:6

我使用 .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 ppdata\local pps .0....... 被拒绝。

at System.IO.File.InternalCopy(字符串源文件名,字符串目标文件名,布尔覆盖,布尔检查主机) 在 System.IO.File.Copy(字符串源文件名,字符串目标文件名,布尔覆盖)

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

令我困惑的是,为什么用户可以通过单击该目录一次来安装程序而没有任何问题,但上传文件却不起作用?

c# wpf clickonce
6个回答
10
投票

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

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

要使您的应用程序始终请求管理员权限,您可以修改应用程序的清单文件并将

requestedExecutionLevel
标签的
level
属性设置为
requireAdministrator
:

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

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


3
投票

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


2
投票

我认为从 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);

1
投票

首先,如果您需要写入任何数据,您应该使用

Environment.SpecialFolder
枚举。

其次,不要写入部署应用程序的任何文件夹,因为它通常对应用程序是只读的。您可能想写入

ApplicationData
LocalApplicationData
枚举。


0
投票

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


0
投票

在谷歌搜索此问题时出现了此线程。我最终通过向受信任的安装程序授予将文件复制到的文件夹的权限来解决这个问题。我无法使用 .msi 以管理员身份运行。

© www.soinside.com 2019 - 2024. All rights reserved.