3

在我的 Win32 应用程序中,我能够运行具有重定向输入和输出到我创建和管理的匿名管道的子进程 - 这一切都适用于 CreateProcess() 函数。但是,在 Win7(可能是 Vista)上,如果需要以管理员身份运行该进程,则此操作将失败。所以我正在寻找的是一种在资源管理器中执行相当于“以管理员身份运行”命令的方法,该命令将显示标准 UAC 提示符,然后创建具有提升权限的进程。我已经看到有关使用 ShellExecute 的“runas”选项来执行此操作的文章,但是当我看到它时,我没有控制我需要将 std 输入和输出重定向到我的管道。有什么建议么?

4

2 回答 2

2

如果你在子应用上放了一个manifest,如果你使用ShellExecute来启动,它会使用manifest,并且会有一个UAC提示。(在大多数情况下,我更喜欢这种“runas”方法。)这可以让您以您喜欢的方式启动应用程序而无需担心 UAC,并从清单中获取提升。

但是,如果您所指的“管理”部分涉及较低权限的应用程序与提升的应用程序通信,您可能会遇到问题。UAC 禁止这样做。

于 2010-08-04T12:43:06.540 回答
0

应该可以在 CreateProcess 调用之前将环境变量设置__COMPAT_LAYERRunAsAdmin,该调用告诉 Windows 通过兼容性标志强制以管理员身份运行。一旦进程启动,环境变量就可以被删除。

于 2019-09-04T10:40:18.103 回答