2012-07-30 111 views
0

我有这个程序,在同一台计算机上的几个用户正在使用(Windows 2008服务器环境与远程桌面客户端)。发送命令到一个进程

当程序正常结束时,它会删除其工作目录中的特殊文件。 我需要能够发送此程序的所有实例一个命令干净关闭(以便它在退出时删除文件)。

什么是最好的方式来做到这一点,以及如何? 我假设每个实例的pid都是一个开始,但那又如何? 任何人有什么好主意?

编辑:忘了提及,它是一个WinForm(不是命令行)程序。

EDIT2:我的意见是太长了,所以我想这是最好的只是编辑,而不是问题...

文件是删除实际上是一个文件,其中包含它的PID。 拥有此文件的原因是为了确保用户不会尝试使用相同参数(登录信息)启动程序两次。

实际启动客户端程序的主程序(控制中心)正在跟踪用户目录中的pidfile。 如果它发现文件它读取pid并尝试查看pid是否存在。 如果没有,它实际上会删除文件并让用户启动客户端窗口。

我猜想通过使用该过程,我可以使其查找与我的应用程序关联的所有pid,并简单地杀死它们,ut我会优先考虑能够发送关闭命令,因为这也会通知用户在IM中,无论出于何种原因,程序都会关闭。 (客户端启动,启动远程服务器,或者在本例中为“本地服务器启动”)。

+0

你不能彻底关闭和基于pid的应用程序 – 2012-07-30 19:55:35

+2

任何“退出时删除文件”的要求是一个令人头痛的问题,这将是一个麻烦,失电是一种典型的故障模式。程序可以在启动备份时轻松删除该文件 – 2012-07-30 20:07:43

+0

我同意Hans的观点,您是否考虑过在启动时删除文件或将值存储在内存中,例如作为'string'。 – 2012-07-30 20:43:06

回答

0

您可以通过使用Mutex

使用系统范围内的事件查看链接页面上的MSDN

2

的例子中Mutex是一些代表相互排斥。在这种情况下,我不认为这真的是你想要的。这不是真正建模你想要的东西;加上时间只有一个应用程序将能够关闭。我建议使用名为EventWaitHandle的模型将应用程序发送到其他应用程序的事件(关机事件)。如果使用手动重置事件(通过使用EventResetMode.ManualReset当你创建一个EventWaitHandle对象。

你这样做在后台线程,信号时,便要鼓起的东西转移到UI线程(通过Control.BeginInvoke)进行通信它需要关闭的主要形式