C# 如何获得其他流程';使用c语言编写环境变量#
我有一个提升的进程,我正试图使用C#从另一个进程中提取一个环境变量。我知道通过使用Process Explorer存在该变量 我可以获得如下流程环境变量: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变
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撰写了一份报告,并提供了一个示例解决方案