的Windows URL方案调用运行的程序
问题描述:
我想在我运行的应用程序触发一个事件,并用URL方案在Windows 10 调用提供参数,我们做了如下注册表项:的Windows URL方案调用运行的程序
HKEY_CLASSES_ROOT
alert
(Default) = "URL:Alert Protocol"
URL Protocol = ""
DefaultIcon
(Default) = "alert.exe,1"
shell
open
command
(Default) = "C:\Program Files\Alert\alert.exe" "%1"
显然,当调用'alert:arg1'时,它总是用一个参数启动我的应用程序的新实例。但是我想让Windows调用我已经运行的实例。
在Mac,这个URL方案的呼叫触发一个事件,我能赶上。正好如我所愿。为此,我将以下部分添加到alert.app/Contents/Info.plist中:
<array>
<dict>
<key>CFBundleURLName</key>
<string>Alert</string>
<key>CFBundleURLSchemes</key>
<array>
<string>alert</string>
</array>
</dict>
</array>
那么我如何在Windows上实现这一点?我在编程这个XOJO应用面向对象的基本的,但我会很高兴的通用解决方案。
答
那么,在阅读Alex的答案之后,我搜索了如何用代码实现这一点,并发现了一个很好解释和工作solution从Brad Smith用C#编写。
注册表项以上可以留,因为它是,但程序也需要:
- 服务类
- A(它是由应用程序实例通过.NET远程
曝光)修改后的条目点(其将或者与服务通信,然后终止,或正常启动应用程序)
阅读他的文章并查看他的代码以获得进一步解释。
的Windows只是将重新启动可执行所以你的问题实在是“如何做IPC在Windows”。我不知道你什么堆支持,但是这通常是由具有EXE完成尝试创建一个命名的互斥体在加载时,如果它不能它知道自己的另一个实例正在运行,此时它使用一个IPC机制,使例如通过发送命名管道来转发其命令行。 –
让您的应用程序单实例(事实上的方法是使用一个互斥)和新启动的情况下将消息发送到已经运行的一个,然后退出。 – CodeCaster
感谢Alex和CodeCaster领导我的正确途径。有了这些信息,我发现了一篇带有工作代码的好文章,并将其作为答案发布。 –