【问题标题】:Asking for administrator privileges in MFC application only when it is needed仅在需要时才在 MFC 应用程序中请求管理员权限
【发布时间】:2012-06-05 22:46:37
【问题描述】:

我正在使用 Visual C++ 2010 开发一个应用程序,该应用程序面向 Windows 7。有一项任务是向注册表写入一些值,该任务仅在某些特殊情况下才会发生。并且由于在 Windows 7 中,需要具有管理员权限才能执行此操作。我如何以某种方式对我的应用程序进行编程,当需要执行此类操作时,它会要求管理员权限,并且在启动时不会要求管理员权限。 谢谢。

【问题讨论】:

  • 我认为你做不到。 Windows 在启动时提升程序或根本不提升程序。
  • CWinApp::WriteProfileString 不允许您为应用程序写入注册表吗?我没有看到在您的应用程序之外进行修改的用例。只是说'
  • CWinApp::WriteProfileString 写入 HKCU。我认为要求是写入 HKLM hive,普通用户帐户是不允许的。
  • 当然,应用程序想将某事写入HKEY_CLASSES_ROOT。而且我不希望我的应用程序以 UAC 提示符开始。我认为有一种方法可以在需要时出现。

标签: visual-c++ mfc uac


【解决方案1】:

就像 Mark 所说,您不能按需提升您的特权。一个快速的解决方案是编写一个单独的可执行文件来完成编写部分,并在需要时使用特定的命令行参数启动它。当然,这个可执行文件必须在其清单中具有“requireAdministrator”权限。

您还可以将此程序设计为服务并设置 IPC 机制,例如使用命名管道。管道本身可以创建一个安全描述符,允许普通用户访问它,确保以较低权限运行的程序能够写入它。

第二种方法的目的是消除第一种解决方案中出现的讨厌的 UAC 提示。

【讨论】:

  • 谢谢,我想我别无选择,但在其清单中编写具有“requireAdministrator”权限的不同应用程序并将其包含在我的资源中,因此当我需要做这些事情时,我将该应用程序写入临时文件夹并执行。如果我不正确,请通知我。
  • 但是,我想我在一些应用程序中看到,当我们为某些东西按下特殊按钮时,应用程序只要求管理权限。
  • 不要编写单独的应用程序,只需在同一个应用程序中执行 - 假设应用程序是否以 /command:doit 启动。您不必拥有 uac 清单,因为您可以使用 ShellExecuteEx() 和“runas”作为动词以提升的权限启动任何应用程序。
猜你喜欢
  • 2021-07-27
  • 2020-07-13
  • 2018-05-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2010-09-20
  • 1970-01-01
相关资源
最近更新 更多