1

我有一个通过命令行启动的 C# 应用程序。通常数据是通过命令行传递的,例如 add ( app -a string)。我希望只打开一个应用程序实例,如果通过命令行添加更多字符串,我希望单个实例了解它并自行更新。我可以将数据正确地放入数据库,然后对正在运行的实例进行 msg 或 msg 并将数据传递给正在运行的实例并让它将其放入数据库中并自行更新。

我将如何在 C# .NET 中执行此操作?(3.5)

4

1 回答 1

4

应用程序的第一个实例应该创建一个命名管道,应用程序的后续实例将无法创建相同的命名管道,而是应该尝试打开命名管道以供使用。一旦打开,字符串(或实际上任何数据)都可以传输到已经运行的应用程序实例。然后可以关闭命名管道并且应用程序可以退出。

或者,您可以使用 .NET Remoting 并注册应用程序的其他实例可以激活的众所周知的类型,其行为类似于上述内容。

最终,快速搜索“IPC”或“进程间通信”可能会打开其他选择。但我相信命名管道方法是最干净的,也是最容易实现/扩展的。

对于“首次运行”检测,您还可以创建一个命名互斥锁,以防您选择在多次运行时不会出现故障情况的 IPC 机制(例如,使用数据库作为数据共享的中间人)。没有两个处理可以“创建”具有相同名称的互斥锁,这与命名管道的约束相同,因为这些名称由内核管理(因此跨越进程、会话、桌面和窗口站边界。)

于 2009-11-06T03:13:55.113 回答