【问题标题】:Unable to delete files in "Program Files\my app" folder : System.UnauthorizedAccessException :Access to the path '' is denied无法删除“Program Files\my app”文件夹中的文件:System.UnauthorizedAccessException:拒绝访问路径“”
【发布时间】:2019-02-14 13:23:48
【问题描述】:

我正在尝试创建一个更新程序,它将替换文件夹中的文件,而无需安装程序。作为此过程的一部分,我需要能够删除旧文件并用新文件替换它们。我试了一下,得到了 UnAuthorizedException。我以管理员身份运行更新程序。我尝试了以下 一种。将文件和文件夹属性设置为正常 [Access to the path is denied when trying to delete a certain directory 湾。取得文件夹和其中包含的文件的所有权 [Taking ownership of a file or folder C。更改权限并让所有用户完全控制文件夹和文件 [在安装程序中使用自定义操作] [How to give Read/Write permissions to a Folder during installation using .NET d。从 Windows 服务运行更新程序

结果没有区别。我不断收到拒绝访问错误。我该怎么做才能让更新程序删除文件?

【问题讨论】:

  • 请尝试使用“FullControl”为“Everyone”授予路径访问权限
  • 你可以试试这个:superuser.com/questions/1031275/…
  • 感谢@gulshanarora 和 Nhan Phan。有效。没有被删除的文件是应用程序正在使用的文件
  • 谢谢!您能否为我的回答“投票”,以便对其他人有所帮助。
  • 仅作记录:替换正在使用的文件和执行提升的操作(例如替换%ProgramFiles% 下的文件)是 MSI 包 (Windows Installer) 和其他包类型支持的关键功能。 Restart Manager 等高级功能可用于处理正在使用的文件和任何需要的重新启动。还有许多其他问题:磁盘空间检查、事务和回滚等……从长远来看,使用此功能将对您有所帮助。只是我的2美分经验。这完全取决于我猜你的产品有多大。

标签: c# windows-services windows-installer


【解决方案1】:

不清楚您所说的“以管理员身份运行”究竟是什么意思,但以管理员身份登录并运行程序并不意味着程序以提升的权限运行,这是它真正需要的。但显然更新程序没有运行提升。

所以问题可能是您的这个更新程序需要一个提升清单,这样当您运行它时,它会通过 UAC 提示请求提升。

话虽如此,不支持仅替换使用 Windows 安装程序 MSI 安装的文件。这些文件必须替换为 Windows Installer 更新,例如补丁 .msp 文件或升级的 MSI 文件。 Windows Installer 会跟踪已安装的每个文件、其版本、是否已更新,以及文件哈希。在不使用 Windows Installer 的情况下替换文件可能会导致对原始 MSI 文件的意外需求,以便 Windows 可以将文件恢复到其原始安装状态。您可能会发现转到程序和功能(或右键单击 MSI 文件)并选择修复也将恢复它们。

【讨论】:

  • 感谢 Phil DW 对补丁 .msp 文件的建议。我也会探索这个选项
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2012-10-31
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多