2017-07-28 39 views
2

我想在我运行的应用程序触发一个事件,并用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应用面向对象的基本的,但我会很高兴的通用解决方案。

+0

的Windows只是将重新启动可执行所以你的问题实在是“如何做IPC在Windows”。我不知道你什么堆支持,但是这通常是由具有EXE完成尝试创建一个命名的互斥体在加载时,如果它不能它知道自己的另一个实例正在运行,此时它使用一个IPC机制,使例如通过发送命名管道来转发其命令行。 –

+0

让您的应用程序单实例(事实上的方法是使用一个互斥)和新启动的情况下将消息发送到已经运行的一个,然后退出。 – CodeCaster

+0

感谢Alex和CodeCaster领导我的正确途径。有了这些信息,我发现了一篇带有工作代码的好文章,并将其作为答案发布。 –

回答

1

那么,在阅读Alex的答案之后,我搜索了如何用代码实现这一点,并发现了一个很好解释和工作solution从Brad Smith用C#编写。

注册表项以上可以留,因为它是,但程序也需要:

  • 服务类
  • A(它是由应用程序实例通过.NET远程
    曝光)修改后的条目点(其将或者与服务通信,然后终止,或正常启动应用程序)

阅读他的文章并查看他的代码以获得进一步解释。

相关问题