1

我在 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。

4

1 回答 1

1

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

于 2010-07-30T12:09:29.503 回答