2017-07-28 95 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遠程
    曝光)修改後的條目點(其將或者與服務通信,然後終止,或正常啓動應用程序)

閱讀他的文章並查看他的代碼以獲得進一步解釋。

相關問題