gpt4 book ai didi

c++ - UAC,需要管理员和文件访问

转载 作者:行者123 更新时间:2023-11-28 03:50:49 29 4
gpt4 key购买 nike

我在 Vista/7 上遇到 UAC 问题。我的 UAC 执行级别 = requireAdministrator 的安装程序安装并运行我的应用程序。应用程序 UAC 执行级别 = asInvoker。所以第一次由安装程序运行的应用程序——它以管理员身份运行。然后,应用程序创建一些文件来存储自身状态。后来——如果应用程序是由用户启动的,而不是管理员——应用程序只能从创建的文件中读取,但不能覆盖它们。我试图在应用程序 list 中禁用 UAC,或者构建没有 list 的应用程序,但结果仍然相同—— - 当应用程序以用户身份运行时,无法覆盖以管理员身份运行应用程序时创建的每个文件。我尝试了其他一些安装程序,如 Inno Setup,但没有遇到像我的问题那样的问题......所以我的问题 - 为什么它会发生在我的案例中以及如何解决它?谢谢。

附言重要笔记1.实际上它不是安装程序。这是更新主要应用程序可执行文件的实用程序。主应用程序检查服务器是否有更新(如果有)——将更新下载到临时文件夹,然后启动具有提升权限的实用程序 (http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx) 以替换Program Files 文件夹中的可执行文件。主应用程序在启动实用程序后立即终止。2. 所有文件应用程序存储在 ProgramData\myAppName 文件夹中。

最佳答案

您安装的应用程序是仅针对当前用户还是针对机器上的所有用户?

对于每用户安装,安装程序在用户的 AppData 文件夹中创建初始应用程序状态是有意义的。 MSI 以非提升的方式运行每用户安装,因此应用程序无法修改的 AppData 文件夹中的文件没有问题。

对于每台机器安装,将任何内容放入特定用户的 AppData 文件夹或用户配置文件位置下的任何位置都没有意义。新用户可以在安装应用程序后登录机器,他们不会有任何东西。

也就是说,您有三种解决方案(实际上是两种解决方案和一种 hack):

  1. 使用每用户安装。设置 ALLUSERS=2 和 MSIINSTALLPERUSER=1。您的 MSI 将以非提升的方式运行。 MSI 可以自由地将任何状态文件放在 AppData 文件夹中。
  2. 使用每台机器安装。不要写入用户的应用程序数据。相反,将初始状态文件写入 %ALLUSERSPROFILE%。它们对应用程序是只读的。修改您的应用程序以在首次运行时将初始状态从 %ALLUSERPROFILE% 复制到当前用户配置文件。
  3. 将自定义操作添加到您的安装程序以将用户添加到 ACL。

(#3) 是一个 hack,我不推荐它,因为你的应用程序对于新用户来说会被破坏,或者当用户在机器上重新创建他的配置文件时。

关于c++ - UAC,需要管理员和文件访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573532/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com