【问题标题】:When does an application absolutely require to be run as an administrator?什么时候绝对需要以管理员身份运行应用程序?
【发布时间】:2013-04-18 21:04:12
【问题描述】:

一段时间以来,我一直在尝试与 UAC 很好地合作,我发现了一些事情:

  1. 启用 UAC 后,Startup 文件夹中需要以管理员身份运行(例如通过嵌入式清单)的程序无法根据 this Stack Overflow thread 运行。
  2. 在启动时运行程序的另一种方法是在 64 位计算机中创建一个包含该应用程序路径的密钥:HKLM or HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKLM or HKCU\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
  3. 另一种方法是使用任务计划程序设置以最高权限运行选项。这是绕过第 1 点所述问题的唯一方法。

来自 Linux 背景,我对所有这些与管理员权限相关的问题一无所知。如果有人可以列出绝对需要管理员权限的场景,那将有很大帮助!

我问这个是因为当我开发一些应用程序时,我在实施过程中不断遇到一些问题,主要是因为我的应用程序需要管理员权限,而它不应该。

如果我在设计时知道所有可能需要管理员权限的场景,我可能会为我的所有应用程序设计一个通用服务来处理所有管理员任务(我认为服务是 Windows 的处理方式,例如这个)。

【问题讨论】:

  • 唯一需要管理员权限的场景是调用需要提升权限的函数的场景。
  • @CaptainObvlious,你能给我一些这样的功能的例子吗?

标签: c++ windows elevated-privileges


【解决方案1】:

确实没有需要提升的场景或 API 函数调用的列表。您最好的选择可能是关注哪些 API 调用需要提升。这样做的原因是,只有在将某些值传递给函数时才可能需要它。例如CreateFile 可以在您的主目录中创建一个文件而无需提升,但需要它在 C:\Windows 中创建文件。如果目录是通过用户输入提供的,那么您可以知道是否需要提升的唯一方法是在调用失败时检查错误代码。如果需要提升,该函数会将错误状态设置为ERROR_ACCESS_DENIED,并返回一个指示失败的值。

【讨论】:

  • 这是一个场景的例子。另外,如果没有一个列表,你不认为如果我们在这个线程中创建一个列表会对所有 Windows 程序员都非常有帮助吗?它肯定会在设计应用程序时帮助人们。
  • 可能会有所帮助,但几乎不可能维护并且不适合 SO。该列表将包括数百个甚至数千个 API 调用,每个调用都有几个变体以涵盖所有可能性。您应该假设所有 Windows API 调用都可以返回 ERROR_ACCESS_DENIED 并进行适当的处​​理。
  • 没有没有。我说的是 scenarios 而不是 API 调用。在您自己的回答中,您提到 CreateFile(something in C:\Windows) 需要提升。那是一个场景。我敢肯定不会有太多的场景。
  • @AnishRam:在这种情况下,场景列表很简单:只要您更改影响其他用户的内容。
  • @AnishRam 每个可能需要提升的调用都需要为每个参数值组合记录。您最终会遇到大量 API 调用的场景,并且会出现同样令人头疼的问题。鉴于大小和可维护性问题,它不适合 SO。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2011-09-24
  • 2010-12-19
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多