系统.UnauthorizedAccessException:访问路径"…"被拒绝

本文关键字:quot 拒绝 UnauthorizedAccessException 路径 系统 访问 | 更新日期: 2023-09-27 18:07:19

我有c# wpf安装完成与。net使用点击一次安装。一切正常。然后我有以下代码,这是已安装程序的一部分:

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

但是我得到这个错误:

系统。unauthorizedaccesssexception:访问路径C:'user'pc'appdata'local'apps'2.0.......被拒绝。

在System.IO.File

。内部复制(字符串sourceFileName,字符串destFileName,布尔覆盖,布尔checkHost)在System.IO.File。复制(字符串sourceFileName,字符串destFileName,布尔覆盖)

是权限错误还是我需要在我的代码中调整一些东西?

让我困惑的是,为什么用户可以使用点击一次安装程序到该目录没有任何问题,但上传文件到它不工作?

系统.UnauthorizedAccessException:访问路径"…"被拒绝

在安装应用程序时,安装程序通常要求管理员权限。如果用户选择"是",程序将运行,并具有比普通用户更多的路径读写访问权限。如果安装程序没有要求管理权限,则可能只是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末尾可能已经有一个'),通常使用path . combine (..)

比较好。
String destinationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), fileName);

在我的例子中,远程服务器返回的是"answers"…"当我试图下载(SFTP)文件并写入我们的本地/网络文件夹时。我要明确地抛弃";和"…"文件名。