2013-04-04 117 views
0

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

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

我知道这不是最好的编程习惯,但我只是一个临时解决方案,直到我们在数据级别上实现更复杂的锁定机制。

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

成才这样的:

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

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

所遇到的.NET远程,WCF,IPC却发现是这个相当“简单”的任务非常重量级的。

+0

你是什么意思的“项目”像一个Visual Studio项目? – 2013-04-04 12:37:01

+0

它是一个包含其他数据的容器。它来自SQL Server数据库。它类似于Visual Studio项目,因为它具有类似的结构,但基本上它只是一个数据库存储POCO – SvenG 2013-04-04 13:19:49

回答

1

如果是临时解决方案,只需选择简单方法:
当一个进程加载一个项目时,只需在app目录中用项目名称或ID编写一个文件即可。如果文件已经存在,则意味着该项目已经加载到另一个进程中。 如果您想知道哪个进程打开了项目,您还可以将进程ID写为文件内容。

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

+0

这是一个好主意,我会试试看..谢谢! – SvenG 2013-04-04 15:29:00

1

如果这是因为你说一个临时解决方案,则可以给每个项目的标识符(例如文件名)并在主窗口的标题显示它,例如

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

然后检查项目是process.MainWindowTitle.Split(' ').Contains开放。

+0

谢谢你,这是一个非常聪明的想法,不幸的是我的案例中的项目名称不是唯一的,所以我将不得不显示它的Guid,它在窗口标题中看起来不会很好...... – SvenG 2013-04-04 15:27:42