2017-10-04 83 views
3

UWP應用程序可以使用Extension Category="windows.protocol"MSDN)註冊自定義方案。我知道自定義協議處理程序通過註冊一個URI方案(MSDN),但這些總是啓動應用程序的新實例。我想要的是一個UWP應用程序的行爲:如果有一個當前正在運行的實例,它將被激活。是否有類似於UWP windows.protocol的桌面機制?

我還研究了URL Monikers和異步可插入協議(MSDN),但這些協議只在調用協議進程時才起作用,例如在使用Web視圖時。即使其他進程(如Web瀏覽器)調用協議,UWP應用也會被激活。

這是用於C++ Win32桌面應用程序; .NET不是一個選項。

此外,正如我在對Anders提議的評論中所說的,我不想在創建一個單獨的組件來激活正在運行的應用程序,而其他某個進程(如瀏覽器)調用我的協議時。 UWP應用程序沒有這樣的要求,我想爲我的應用程序相同。

+0

這將有助於澄清你的問題,如果你刪除了UWP引用,而是簡潔地發佈你以後的要求。 – IInspectable

+0

執行此操作的標準方法是讓應用程序在啓動期間檢查現有實例,以及是否有一個將請求傳遞給舊實例並終止。每個人都這樣做,不僅在協議處理程序方面。這樣做沒有問題。 – conio

回答

0

您可以實施IExecuteCommand,即Internet Explorer爲其HTTP註冊(DelegateExecute)所做的操作。您的實現可以簡單地查找應用程序的現有實例並與之通信(如果有的話)或正常啓動。

This blog post應該讓你開始...

+0

我認爲這並不比註冊自定義協議處理程序更好,因爲它還需要一個單獨的組件,一個COM組件,它在單獨的進程中執行,即shell。 UWP應用程序不需要任何其他組件。 –

+0

在您的應用程序中執行一個超出程序的COM服務器,但是,這樣做是額外的工作。 – Anders

+0

@Anders:我一直認爲「out-pro-proc」代表「o​​ut * process *」。不是嗎?或者您是否使用包含多個進程的「應用程序」的廣義定義? – conio

相關問題