【问题标题】:Windows7: Elevating permissions for one callWindows7:提升一次通话的权限
【发布时间】:2016-05-08 07:16:08
【问题描述】:

我正在为任务栏通知区域开发一个应用程序(Windows XP 和 7 - 不要问!;))。它是从用户和管理员帐户启动的,通常不需要提升权限,我也不想在应用程序启动时用 UAC 对话框打扰每个用户。

现在我想集成一个需要提升权限的调用(写入注册表,HKLM),我想知道在 Windows 7+ 上实现这个(在本例中为 Delphi)的最佳策略?

我看到程序以提升的权限和参数 (Delphi: Prompt for UAC elevation when needed) 调用自己 - 但有没有更好的方法?

【问题讨论】:

  • 为什么你需要写信给总是需要管理员权限的HKLM?你可以不写信给 HKCU 吗?
  • HKLM 是必需的,因为它是系统范围的设置。
  • 如果是系统范围的设置,它应该由安装程序在安装时编写(需要管理员权限才能运行)。
  • 这是一个系统范围的设置,可以由管理员更改...

标签: delphi windows-7 uac freepascal


【解决方案1】:

您只能在创建进程时提升进程。这意味着您需要为此任务创建一个新流程。

当您需要执行提升的任务时,通过使用 runas 动词调用 ShellExecuteEx 来启动一个新进程。在进程命令行中指定要执行的任务。

如果您可以在安装时执行此任务,那可能更可取。

【讨论】:

  • 这是一种方法,坦率地说,这是最简单的方法,但不是唯一的方法。另一种方法是在 COM 对象中实现所需的管理任务,然后主应用程序可以在需要时使用 COM Elevation Moniker 实例化该对象。这样,您不必生成单独的进程。
  • @Remy 你确实产生了另一个进程。 COM 服务器在单独的进程中运行。
  • 好的,让我重新调整一下:“这样,您不需要显式手动生成一个单独的进程。主应用程序可以使用并与之通信COM 对象,就像任何其他 COM 对象一样。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
相关资源
最近更新 更多