C# 如何获得其他流程';使用c语言编写环境变量#

C# 如何获得其他流程';使用c语言编写环境变量#,c#,.net,environment-variables,C#,.net,Environment Variables,我有一个提升的进程,我正试图使用C#从另一个进程中提取一个环境变量。我知道通过使用Process Explorer存在该变量 我可以获得如下流程环境变量: Process process = Process.GetProcessesByName("someprocess").First(); string value = process.StartInfo.EnvironmentVariables["var_name"]; 但只返回传递给process.Start()的process env变

我有一个提升的进程,我正试图使用C#从另一个进程中提取一个环境变量。我知道通过使用Process Explorer存在该变量

我可以获得如下流程环境变量:

Process process = Process.GetProcessesByName("someprocess").First();
string value = process.StartInfo.EnvironmentVariables["var_name"];
只返回传递给process.Start()的process env变量的子集。


如何获取在进程运行时设置的环境变量?

从我所能找到的情况来看,这似乎不是一个现成支持的操作

最接近的是 GetEnvironmentVariables(EnvironmentVariableTarget.Process)

不幸的是,这似乎被当前流程“锁定”。如果有一种方法可以设定目标流程,你将是黄金

幸运的是,Microsoft提供了一个“参考源”,您可以使用它查看.NET中的底层代码(在本例中)。如果函数支持做您想要做的事情,您可以为它制作自己的包装器

如果您追踪到这一点,您会发现不安全上下文中的Win32调用是最终的责任:

看起来,即使该调用也被锁定到当前进程,因此您需要为其编写自己的代码。这里有一个C(或C++,不能告诉LOL)的例子:

您可以将其要点转换为不安全的C#,并在必要时使用DllImports等进行同样的操作。。对不起,答案不是那么简单,但对我来说,这听起来是个有趣的项目


编辑:哦,我喜欢链接的可能复制品做了和我一样的研究,发现了同样的东西,呵呵。。只知道我不只是复制粘贴,我自己做了研究。

它没有很好的文档记录,但没有返回特定过程的环境

如果你看,你会发现引擎盖下的被称为。此函数返回“指向包含调用进程的环境变量(系统和用户环境变量)的内存块的指针”

访问另一个进程的环境块有点棘手。Oleksiy Gapotchenko撰写了一份报告,并提供了一个示例解决方案