【问题标题】:UnauthorizedAccessException with System.IO.File.InternalCopy in ProgramData on Windows 7UnauthorizedAccessException with System.IO.File.InternalCopy in ProgramData on Windows 7
【发布时间】:2010-07-30 06:46:58
【问题描述】:

我在 ProgramData 中安装了一个程序。我使用 UAB 2.1 更新应用程序,但它失败了,因为访问路径被拒绝(文本文件可以,所以我认为 UAC 有问题)。如何在 ProgramData/MyAppFolder 中获得覆盖权限或显示对话框以通知用户为更新程序提供覆盖权限。

非常感谢。

更新

我在http://blogs.msdn.com/b/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx 上读过一篇文章。它说您需要在安装时创建目录并设置所需的 ACL。 我应该将安装文件夹更改为 LocalAppData 还是尝试根据文章在安装时设置 ACL。

【问题讨论】:

    标签: .net windows-7 uac auto-update programdata


    【解决方案1】:

    自行更新的应用在 UAC 下会遇到困难。最好的办法是将执行更新的代码分区到单独的 exe 中。在该 exe 上放置一个带有 requireAdministrator 的清单。在主应用程序中,保留检查更新的代码,并让它在需要更新时启用按钮或菜单项。在该按钮或菜单项上放置一个盾牌,并让它使用 ShellExecute 启动单独的 exe。用户将获得一个 UAC 同意对话框,由于屏蔽,他们将期待该对话框。单独的 exe,因为它被提升,将能够写入 Program Files 和其他受保护的区域。

    【讨论】:

    • 感谢您的回答。我已经理解了您的解决方案,但仍然必须考虑以下几点: 1> 我认为带有 UAC 同意对话框的单独 exe 用户体验不佳。我如何修改 UAC 同意对话框以显示清晰的解释。 2> 如果我的用户只使用标准帐户的程序。我应该将安装文件夹更改为 LocalAppData 还是尝试在安装时设置 ACL。谢谢。
    • 您无法更改 UAC 对话框。但是,您可以提前给他们一个。因此,当更新可用时,给他们一个消息框“更新可用。要安装它,请单击更新按钮。您需要同意 [以他们能理解的方式描述] 对话框。”签署您的应用程序可能会使 UAC 对话框对他们来说更愉快,因为它不会显示 Unknown Publisher 并且顶部有可怕的橙色条。在 ProgramFiles 之外安装您的应用程序会使您的用户容易受到恶意软件的攻击。我不会推荐它。
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 2012-09-07
    • 2022-12-27
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2018-08-21
    相关资源
    最近更新 更多