我有一个包含两个 exe 的应用程序。让我们称它们为MyApp.exe
and MyAppStarter.exe
。我MyAppStarter.exe
这样做的原因是它可以首先在网络上检查是否有MyApp.exe
可用的新版本,以便它可以在启动之前复制它 - 但现在这有点离题了。
我想要实现的是能够注册一个自定义 URL 协议处理程序,MyAppStarter.exe
以便我可以将某种起始条件传递给MyApp.exe
. 例如,如果用户单击电子邮件中指向myapp://userid=123的链接,它应该启动应用程序并立即查看用户 ID 为 123 的用户。或者如果链接是myapp://accid=456它应该立即使用 accid 456 查看帐户。我知道该怎么做,方法是注册自定义 URL 协议处理程序MyAppStarter.exe
,然后MyApp.exe
使用某些参数注册 shell。到目前为止,一切都很好。
现在的问题是,应该MyApp.exe
已经在运行,我想MyAppStarter.exe
识别(我可以这样做)并给它焦点(我也可以这样做)并指示它显示用户或帐户或具有指定 id 的任何内容(这是我卡住的地方)。
我查看了有关如何使用匿名管道进行本地进程间通信的 MSDN 文档。这似乎很简单,但有两件事我不清楚:
如何在两者之间传达管道句柄,以便首先建立管道?请记住,
MyApp.exe
可能已经在MyAppStarter.exe
执行点运行。在我的场景中,我想这
MyAppStarter.exe
将是服务器,而MyApp.exe
将是客户端。这意味着我必须设置一个计时器,MyApp.exe
每隔一段时间检查管道以获取来自MyAppStarter.exe
. 我对这个想法并不生气。只是这个要求是操作的一个很小的部分,MyApp.exe
所以它每秒触发一个计时器,或者无论如何经常看起来,我应该说,不太优雅。我会喜欢的,我可以简单地在 , 中定义一个函数MayApp.exe
,调用void PerformInstruction(string instruction)
它可以从MyAppStarter.exe