【问题标题】:C++ winapi elevationC++ winapi 提升
【发布时间】:2014-06-11 01:55:31
【问题描述】:

我正在开发 Windows 资源管理器命名空间扩展。我的应用程序是 explorer.exe 有时加载和使用的动态库。我需要我的 DLL 在 C:\ 中创建文件,有时在其他需要提升才能执行此类操作的位置。

例如,我怎样才能执行这种提升并在 C:\ 创建文件?

【问题讨论】:

  • @DavidHeffernan,DLL 是否有这样的清单功能?
  • 我是这么认为的。所以这不是 OP 的 DLL 的选项。
  • This 总结得很好。

标签: c++ windows winapi com


【解决方案1】:

如果您的代码在另一个进程中运行,则受该进程的提升状态的支配。如果该进程没有运行提升,而资源管理器没有,那么您的 DLL 中的代码无法执行提升。

因此,您的解决方案是创建另一个流程来执行需要提升的任务。使用以下方法之一执行此操作:

  • 在应用程序清单中为requestedExecutionLevel 指定requireAdministrator 选项。
  • 使用ShellExecuteExrunas 动词启动进程。
  • 将要提升的代码放在 COM 对象中并使用 COM 提升名字对象。

【讨论】:

  • 另一种选择是将需要提升的任务实现为单独的 COM 对象(命名空间扩展本身就是一个 COM 对象,因此对于 COM 开发人员来说这是一个更自然的解决方案),然后使用COM Elevation Moniker 在需要时实例化任务对象。不需要 UAC 清单。
  • 这很好。 com 方法也提供了最简洁的通信方式。
猜你喜欢
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 2014-01-31
  • 2013-03-22
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多