有没有办法将任意数据与Windows进程相关联?

时间:2014-06-17 14:33:30

标签: c# windows process windows-server-2012

我有许多我在服务器上编写过程的实例。我想将一些信息与每个过程联系起来。在这个特定的情况下,我想存储过程的“CurrentState” - “RUNNING | DRAINING | STOPPING”,但是对我来说存储“友好名称”等是有用的。

我想从另一个“母亲”进程查询此信息 - 此母进程将查询正在运行的进程并整理数据。

我想到了几种不同的方式来实现这一目标。例如,我可能会为每个感兴趣的流程打开一个NetPipe并询问数据,或让每个流程定期广播它的状态。

我想知道:有没有办法将密钥值对信息存储在Windows内置的进程中?这样做是否有可接受的模式?

我控制子进程和母进程的源。它们是用C#编写的,P / Invoking很好。操作系统是Windows 2012 R2。

3 个答案:

答案 0 :(得分:1)

您可以托管使用命名管道的WCF服务:

http://msdn.microsoft.com/en-us/library/ms733769(v=vs.110).aspx

根据您的一些评论,您似乎还可以考虑System.AddIn (aka Managed AddIn Framework (MAF))功能来创建,托管和与外接程序通信。 MAF支持在您的应用域,单独的应用域或完全独立的流程中加载插件。 MAF的缺点是需要5个DLL才能启动,但这样做可以在版本和更改管道时为API提供很大的灵活性。

答案 1 :(得分:0)

如果您正在控制母进程中的数据,您还可以使用AppDomainsload your other processes并通过Marhsaled数据进行通信,例如状态类,或者使用AppDomains为SetGet数据。

请注意,您传输的任何状态数据都需要是一个派生自Marshaling类的类,或者标记为Serializable。原因是因为AppDomains在操作系统中被视为与不同进程相同,因此它们无法访问彼此的内存实际上必须序列化数据,就像它通过IPC一样。

答案 2 :(得分:-1)

看一下.Net Process Class:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx

您可以使用它来获取所有正在运行的进程,启动进程,获取进程唯一ID,并在进程退出时收到警报。这应该为您提供跟踪流程所需的一切。

儿童可以致电Process.GetCurrentProcess获取自己的流程ID,然后拨打电话给母亲"关联自己的任意数据的过程。