2016-07-29 144 views
1

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

我可以得到过程的环境变量如下所示:

Process process = Process.GetProcessesByName("someprocess").First(); 
string value = process.StartInfo.EnvironmentVariables["var_name"]; 

StartInfo只返回过程ENV变量的一个子集,传递给的Process.Start()

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

回答

2

它没有很好的记录,但ProcessStartInfo.EnvironmentVariables不返回特定过程的环境。

如果你看看reference source,你会发现在引擎盖下GetEnvironmentStrings function被调用。该函数返回“一个指向包含调用进程(系统和用户环境变量)的环境变量的内存块的指针”。

访问另一个进程的环境块有点棘手。 Oleksiy Gapotchenko撰写了一份excellent blog post,并提供了一个样本解决方案。

0

从我能找到它看起来这不仅仅是一个支持开箱即用的动作。

最接近的是 Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);

不幸的是,似乎是“锁定”到当前进程。如果只有一种方法来设置目标进程,那么你就会成为黄金。

幸运的是,Microsoft提供了一个“参考源”,您可以使用它来查看.NET中的底层代码(在本例中为http://referencesource.microsoft.com/#mscorlib/system/environment.cs,20e3d8aa4eb8f4b1)。如果该函数支持做你想做的事情,你可以为它制作自己的包装器。

如果您跟踪下来你会发现在不安全的上下文中的Win32调用是最终负责人:http://referencesource.microsoft.com/mscorlib/R/c48702b7df790f4c.html

看起来甚至调用锁定到当前进程,所以你需要编写自己的代码为了它。下面是C中的示例(或C++,不能告诉笑): http://www.codeproject.com/Articles/25647/Read-Environment-Strings-of-Remote-Process

您可以在该要点转化为不安全的C#和使用DllImports等必要做同样的事情..对不起答案ISN那么简单,但对我来说这听起来像一个有趣的项目!

编辑:哦,我爱的链接可能重复的是怎么做的我做了同样的研究,发现了同样的事情,嘿..只要知道,我不只是复制粘贴,做的研究自己..