【问题标题】:How to start process /instance with a custom identifier如何使用自定义标识符启动进程/实例
【发布时间】:2016-09-06 14:06:13
【问题描述】:

我必须启动应用程序的多个实例,并且以后必须以某种方式识别它。

是否可以使用一些自定义 TAG 来启动实例,以便稍后我可以找到我需要的实例?

Process p = new Process();
// p.TAG = "Guid"; ??????
p.StartInfo.FileName =  "path";
p.Start();

更新 1

我在 WPF 应用程序的 LOAD 事件中启动了几个进程。有时无法获取当前应用的进程 ID。因此,如果可能的话,我正在寻找以某种自定义方式区分实例的方法......

所以模型看起来像

ParentApp.exe
    ---->  Sun.exe
    ---->  Moon.exe


ParentApp.exe
    ---->  Sun.exe
    ---->  Moon.exe

并且我使用 ParentApp.exe 的 LOAD 事件将正确的进程 ID 传递给 Sun.exe 和 Moon.exe,以便稍后他们可以创建正确的 MSMQ 并与 ParentApp.exe 交换数据,并且 ParentApp.exe 可以关闭这些应用程序。

更新 2

我们可以在应用程序执行期间保留一些自定义数据

p.Domain = "mydomain?????";
p.EnvironmentVariables.Add("MY_NEW_VARIABLE", "SOME_TEXT????");

http://blog.gapotchenko.com/eazfuscator.net/reading-environment-variables

【问题讨论】:

  • 看这个:stackoverflow.com/questions/611094/… 启动进程后返回的变量,你可以将它存储在一个列表中,然后使用它来确定该进程是否仍在运行。
  • @Versatile 这与问题有什么关系?
  • @Dimi 为什么除了Process 对象本身之外还需要其他标识符?除非您重用同一个对象来启动多个进程,否则每个Process 对象都对应于它启动的进程。你可以得到进程的PID是由Id属性返回的
  • @Dimi 你想做什么?为什么要在进程中附加一些标签?它的唯一 ID 还不够吗?
  • 伙计们,你们完全错过了这个问题的重点,关于“为什么”他需要标记进程的争论没有帮助。我运行一个管理器,我希望能够在其中查询进程,即使在我的服务重新启动后也是如此。我并不总是有 id,我希望我的服务经理是无状态的。存储进程 ID 不是一种选择。在那里,这是我的问题,所以不要再说使用你已经被告知的进程 ID 不是一个选项。

标签: c# .net process instance


【解决方案1】:

您可以存储Process.Id

Process p = Process.Start("notepad.exe");
MessageBox.Show(p.Id.ToString());

【讨论】:

  • 拥有流程对象本身就不需要存储Id。
  • 这种方法的主要问题是有时它不会返回 Id,所以我正在寻找另一种方法。如果可以的话当然...
  • @Dimi “有时”是什么意思?如果您的进程终止,或者它产生另一个进程然后终止,则该 ID 无论如何都将无效。除了 ID 之外,没有其他方法可以识别进程
  • @PanagiotisKanavos 我在 wpf 应用程序的 LOAD 事件中启动了几个进程。并且有时无法获取当前应用的进程ID。
  • @Dimi 首先,为什么要启动多个进程?如果您想要并行处理,请使用 PLINQ 或 Dataflow。其次,你确定进程已经开始了吗?在检查 ID 之前,您必须等待它们真正开始。在任何情况下,如果您拥有该对象,您甚至都不需要 Id。最后,您可以检索所有正在运行的实例,例如使用 Process.GetProcessesByName("somename")
猜你喜欢
  • 1970-01-01
  • 2018-09-26
  • 2021-12-12
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2019-08-16
  • 1970-01-01
相关资源
最近更新 更多