4

程序 1 使用 SetEnvironment 并调用 ShellExecute 来启动程序 2。程序 2 调用 GetEnvironment 并从中检索值。令人惊讶的是,正如我在 MSDN 中所读到的那样,SetEnvironment 是特定于进程的(至少在我的情况下)。ShellExecute 是否在内部调用 CreateProcess(作为子进程),这反过来又允许程序 2 访问在程序 1 中创建和设置的 ENV 变量......我使用 SetEnvironment 创建和使用与 Windows 用户和系统变量完全不同的 ENV 变量。

4

1 回答 1

4

它将共享环境,但在运行提升(verb="runas")时不会。

然后,您需要在使用 CreateProcess() 或类似方法重新启动之前创建一个设置环境的中间包装应用程序(即提升的)。

这是因为非特权用户可能会更改 PATH 以指向错误的东西(带有恶意 DLL 的目录),然后提升的应用程序将面临风险,因此必须明确解决此问题。

于 2017-02-22T08:01:12.767 回答