我知道如何从使用以下命令的进程中启动具有管理员权限的进程:
proc.StartInfo.UseShellExecute = true; proc.StartInfo.Verb = "runas";
其中proc是System.Diagnostics.Process。但是如何做到相反呢?
如果您所在的进程已经提升,那么如何在没有管理员特权的情况下启动新进程?更准确地说,我们需要以与Windows资源管理器相同的权限级别启动新进程,因此,如果禁用了UAC,则无需进行任何更改,但是,如果启用了UAC,但是我们的进程运行在提升状态,则需要执行不提升的某些操作因为我们正在创建一个虚拟驱动器,并且如果它是使用提升的权限创建的,并且Windows资源管理器未提升运行,它将不会显示。
随时将标题更改为更好的名称,我无法提供一个很好的描述。
我们最终使用了此代码项目文章中的示例:高海拔可能对您的应用程序不利:如何在安装结束时启动非高海拔过程
到目前为止,它似乎仍然有效,我将其注入到RunDll32.exe中,我的C ++ / Win32相当薄弱,因此我对实际实现并没有太多关注,只是它的使用。确认它在x86和x64的Vista和Win7中都可以正常运行(至少对我们来说,x86和x64需要不同的dll,在安装时会检查该dll,并使用正确的dll)。