2014-04-25 28 views
1

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

我怎么能执行这样的高度,并在C上创建文件:例如\?

+0

@DavidHeffernan,是有这样的表现特征的DLL? – JimmyB

+0

我以为是。所以这不是OP的DLL的选项。 – JimmyB

+1

[This](http://stackoverflow.com/a/4337793/1015327)总结得非常好。 – JimmyB

回答

1

如果你的代码中的另一个进程中运行时,它是在这个过程中抬高状态的摆布。如果该进程没有运行提升,并且explorer没有运行,那么你的DLL中的代码不能执行提升。因此

你的解决方案是建立另一个进程来执行需要提升的任务。使用以下方法之一执行此操作:

  • 在应用程序清单中为requestedExecutionLevel指定requireAdministrator选项。
  • 开始使用ShellExecuteExrunas动词的过程。
  • 将代码提升到COM对象中并使用COM高程名字对象。
+0

另一个选择是将需要提升的任务作为一个单独的COM对象来实现(一个名称空间扩展本身就是一个COM对象,所以这对于COM开发人员来说是更自然的解决方案),然后使用[COM Elevation Moniker](http ://msdn.microsoft.com/en-us/library/windows/desktop/ms679687.aspx)在需要时实例化任务对象。不需要UAC清单。 –

+0

这是一个很好的观点。 com方法也提供了最简洁的沟通方式。 –