我想检查是否存在,如果不存在,请在资源管理器的右键单击(上下文)菜单中添加一些操作。
除了上述要求(可以在网上轻松找到解决方案)之外,我还想添加一个:
假设我注册了以下命令:
- “命令#1” - 触发“C:\MyProg.exe /cmd1”
- “命令#2” - 触发“C:\MyProg.exe /cmd2”
...(也)
如何检查是否有already一个正在运行的实例我的程序并向其传递适当的命令/命令行参数together与用户单击的文件名?
(IOW,我想使用程序已运行的实例来完成我的任务,而不是打开一个新实例)
如果有 Delphi 代码片段,我们将不胜感激。
TIA
执行此操作的最佳方法实际上是在 exe 的启动代码中。换句话说,让资源管理器启动 exe 的第二个副本,然后继续检测它是否已在运行,并让它向正在运行的实例发送消息。
就我个人而言,我几乎没有使用 Delphi 的经验,但我在 .NET 应用程序中执行此操作的方式是使用互斥锁和进程间通信通道。
总体思路是应用程序的第一个实例将启动,并开始侦听 IPC 通道。它还会创建一个命名的进程间互斥体。当第二个实例启动时,它将无法创建同名的互斥体,这意味着前一个实例正在运行并侦听 IPC 通道上的调用。然后,第二个实例通过 IPC 将命令行参数发送到第一个实例,第一个实例对它们采取操作。然后第二个实例退出而不显示任何 UI。
我已经上传了该组件的代码(C#),链接如下。我不相信它有任何外部依赖性,而且我不知道 Delphi 中的等效通信机制是什么 - 但希望这能给您一些想法。
实例管理器组件 (C#)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)