Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;winapi高程_C++_Windows_Winapi_Com - Fatal编程技术网

C++ C++;winapi高程

C++ C++;winapi高程,c++,windows,winapi,com,C++,Windows,Winapi,Com,我正在开发windows资源管理器命名空间扩展。我的应用程序是一个动态库,explorer.exe有时会加载并使用它。我需要我的DLL在C:\中创建文件,有时在需要提升以执行此类操作的其他位置创建文件 如何在C:\处执行这种提升并创建文件?例如,如果您的代码在另一个进程内运行,那么它将取决于该进程的提升状态。如果该进程未运行提升,而资源管理器未运行提升,则DLL中的代码无法执行提升 因此,您的解决方案是创建另一个流程来执行需要提升的任务。使用以下方法之一执行此操作: 为应用程序清单中的requ

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


如何在C:\处执行这种提升并创建文件?

例如,如果您的代码在另一个进程内运行,那么它将取决于该进程的提升状态。如果该进程未运行提升,而资源管理器未运行提升,则DLL中的代码无法执行提升

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

  • 为应用程序清单中的
    requestedExecutionLevel
    指定
    requireAdministrator
    选项
  • 使用带有
    runas
    动词的
    ShellExecuteEx
    启动进程
  • 将要提升的代码放入COM对象中,并使用COM提升名字对象
@DavidHeffernan,DLL有这样一个明显的特性吗?我想是的。所以这不是OP的DLL的选项。另一种选择是将需要提升的任务实现为一个单独的COM对象(名称空间扩展本身就是一个COM对象,因此这对于COM开发人员来说是一个更自然的解决方案),然后在需要时使用来实例化任务对象。不需要UAC舱单,这是一个很好的观点。com方法也提供了最干净的通信方式。