将命令发送到进程

时间:2012-07-30 19:34:23

标签: c# winforms winapi

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

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

最好的方法是什么,以及如何做到这一点? 我假设为每个实例获取pids是一个开始,但那又是什么? 有人有什么好主意吗?

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

Edit2:我的评论太长了,所以我想最好只编辑问题......

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

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

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

2 个答案:

答案 0 :(得分:2)

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

您可以在后台线程上执行此操作,该信号在发出信号时会将某些内容封送到UI线程(通过Control.BeginInvoke),以便与需要关闭的主窗体进行通信。

答案 1 :(得分:0)

您可以使用Mutex

来使用系统范围的事件

请参阅MSDN中链接页面上的示例