我正在撰写联系人管理程序。我知道如何读取命令行参数,并根据我发现的内容执行不同的方法。
例如,program.exe "John Doe"
将启动该程序的新实例并打开它找到的名为John Doe的第一个联系人,program.exe -s John
将启动该程序的新实例并搜索名为“约翰,“而只是运行program.exe
将打开一个新的程序实例,空白的搜索屏幕。
但是,我只想运行该程序的单个实例。因此,当另一个程序调用{{1}}时,如果已经有一个进程在运行,那么参数将被传递给该进程并切换到新的搜索而不是打开一个新窗口。
我知道这需要寻找以前正在运行的进程和进程间通信,但我在.Net中没有做太多工作,并且无法开始正确的方向或找到有关特定主题的任何好的教程。
答案 0 :(得分:4)
Visual Basic dll有一个WindowsFormsApplicationBase,它具有StartupNextInstance事件,您可以在其中获取第二个实例的参数,第二个实例可以在检测到其他实例时自行终止。
已经问过C# : how to - single instance application that accepts new parameters?
答案 1 :(得分:1)
可能这篇帖子可以帮到你。 See Here , also using IPC Channel
答案 2 :(得分:1)
这样做的一种方法是让program.exe托管一个WCF服务(正如你似乎从你的标签中猜到的那样)。然后,当使用命令行参数启动另一个实例时,它将是该服务的WCF客户端,并将参数发送到服务,然后退出。