0

我想在一台机器上允许我的应用程序的多个进程。项目(来自本地数据库)可以在每个进程中加载​​,我想确保一个项目只能在我的应用程序的一个进程中打开。

因此,在打开项目之前,我想检查我要打开的项目是否已经在另一个进程中打开。

我知道这不是最佳编程实践,但在我们在数据级别实现更复杂的锁定机制之前,这只是一个临时解决方案。

我可以检测到另一个正在运行的进程,但是我可以以某种方式访问​​或将其转换为更适合获取我想要的信息的东西吗?

像这样的:

  Process[] allProcesses = Process.GetProcessesByName("MyApp");

  foreach (Process process in allProcesses)
  {
    var projects = process.OpenedProjects;

遇到过 .net 远程处理、WCF、IPC,但发现它们对于这个相当“简单”的任务来说是非常重量级的。

4

2 回答 2

1

如果是临时解决方案,只需选择简单的方法:
当进程加载项目时,只需在 app 目录中写入一个带有项目名称或 ID 的文件。如果该文件已存在,则表示该项目已在另一个进程中加载​​。如果您想知道哪个进程打开了一个项目,您也可以将进程 ID 写为文件内容。

当然,您需要在该过程完成后删除该文件。确保您处理所有异常,以便在不删除此文件的情况下无法完成该过程。即拦截AppDomain.UnhandledException。

于 2013-04-04T12:44:23.560 回答
1

如果这是您所说的临时解决方案,您可以为每个项目提供一个标识符(例如文件名)并将其显示在主窗口的标题中,例如

C:\Project1.proj C:\Project2.proj C:\Project3.proj

然后检查项目是否以process.MainWindowTitle.Split(' ').Contains.

于 2013-04-04T12:44:29.050 回答