系统.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,布尔覆盖)
是权限错误还是我需要在我的代码中调整一些东西?
让我困惑的是,为什么用户可以使用点击一次安装程序到该目录没有任何问题,但上传文件到它不工作?
在安装应用程序时,安装程序通常要求管理员权限。如果用户选择"是",程序将运行,并具有比普通用户更多的路径读写访问权限。如果安装程序没有要求管理权限,则可能只是ClickOnce在某种提升的权限下自动运行。
我建议你写到本地的appdata文件夹,但如果你真的想写到与你的应用程序相同的目录,你必须首先以管理员权限运行你的应用程序。
要使你的应用程序总是要求管理员权限,你可以修改你的应用程序的清单文件,并设置requestedExecutionLevel
标签的level
属性为requireAdministrator
:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
你可以在中阅读更多内容,我如何强制我的。net应用程序以管理员身份运行?
我正在运行一个生成文件的程序。目标文件夹是只读的。它会因为错误而崩溃。使用文件夹属性删除只读属性解决了错误。
首先,如果您需要写入任何数据,您应该使用Environment.SpecialFolder
枚举。
第二,不要写入部署应用程序的任何文件夹,因为它通常是应用程序只读的。您可能希望写入ApplicationData
或LocalApplicationData
枚举。
我认为在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)文件并写入我们的本地/网络文件夹时。我要明确地抛弃";和"…"文件名。