如何使用额外数据启动进程然后搜索此进程?

时间:2010-11-09 20:11:19

标签: c#

我有一个代理程序,它将启动同一个可执行文件的多个实例。每个实例都需要有一个与之关联的个人ID。

代理保留对用于加载实例的Process对象的引用,但我必须考虑可以关闭并重新启动代理,而不会影响已启动的实例。

代理再次启动后,我需要它来搜索现有流程并重新绑定对流程的引用。

如何将数据分配给流程并在之后检索?

现在,我正在开始这样的过程:

this.AttachedProcess = new Process()
{
    StartInfo = new ProcessStartInfo(filename)
};

之后,我需要通过调用Process.GetProcesses()来搜索该过程。

虽然我可以使用命令行参数来启动进程(类似-instance XX)并使用this answer读取该命令行,但我想知道是否有另一种方法来分配额外的数据到流程并稍后检索。

2 个答案:

答案 0 :(得分:2)

您可以在文件中保存您创建的进程的Process.Id 在启动时,您读取该文件并检查这些进程是否仍然启动并检查文件名是否匹配(如果系统已重新启动,则其他某些进程可能已获得这些ID)

答案 1 :(得分:2)

您可以创建一个可序列化的类ProcessInfo,用于存储进程ID以及要与进程关联的任何其他信息。当代理关闭时(例如,如果服务停止,或者它被处理掉,或者关闭事件被触发等),它会将进程信息序列化为文件。当它再次启动时,它应该检查并读入进程信息文件,这将基本上将代理恢复到它关闭之前的状态。

这里的主要思想是代理应该维护这些信息,而不是Windows或正在运行的各个进程。从进程请求辅助数据需要COM,WCF或其他一些消息服务,这对于您正在讨论的那种交互来说是过度的。

请参阅System.Runtime.Serialization namespace,尤其是DataContractSerializer class