我有一个代理程序,它将启动同一个可执行文件的多个实例。每个实例都需要有一个与之关联的个人ID。
代理保留对用于加载实例的Process
对象的引用,但我必须考虑可以关闭并重新启动代理,而不会影响已启动的实例。
代理再次启动后,我需要它来搜索现有流程并重新绑定对流程的引用。
如何将数据分配给流程并在之后检索?
现在,我正在开始这样的过程:
this.AttachedProcess = new Process()
{
StartInfo = new ProcessStartInfo(filename)
};
之后,我需要通过调用Process.GetProcesses()
来搜索该过程。
虽然我可以使用命令行参数来启动进程(类似-instance XX
)并使用this answer读取该命令行,但我想知道是否有另一种方法来分配额外的数据到流程并稍后检索。
答案 0 :(得分:2)
您可以在文件中保存您创建的进程的Process.Id 在启动时,您读取该文件并检查这些进程是否仍然启动并检查文件名是否匹配(如果系统已重新启动,则其他某些进程可能已获得这些ID)
答案 1 :(得分:2)
您可以创建一个可序列化的类ProcessInfo
,用于存储进程ID以及要与进程关联的任何其他信息。当代理关闭时(例如,如果服务停止,或者它被处理掉,或者关闭事件被触发等),它会将进程信息序列化为文件。当它再次启动时,它应该检查并读入进程信息文件,这将基本上将代理恢复到它关闭之前的状态。
这里的主要思想是代理应该维护这些信息,而不是Windows或正在运行的各个进程。从进程请求辅助数据需要COM,WCF或其他一些消息服务,这对于您正在讨论的那种交互来说是过度的。
请参阅System.Runtime.Serialization namespace,尤其是DataContractSerializer class。