在 Windows 8 中注册协议处理程序



我正在尝试注册我的应用程序,该应用程序将处理链接的打开,例如,http://stackoverflow.com。 我需要为 Windows 8 明确执行此操作,我在早期版本的 Windows 中运行它。 根据MSDN的说法,这在Win8中已经发生了变化。

我已经浏览了 MSDN 上的 MSDN (msdn.microsoft.com/en-us/library/cc144154.aspx) 页面上的默认程序页面。 它提供了处理文件类型的出色演练,但对协议的详细信息很轻。 将应用程序注册到 URL 协议仅涉及设置新协议所涉及的步骤,而不介绍如何将新处理程序正确添加到现有协议。

我还尝试了其他SO帖子中概述的注册表设置。

还有一件事,该应用程序不是 Metro/Windows 应用商店应用程序,因此在清单中添加条目对我不起作用。

您在默认程序网页上走在正确的轨道上 - 事实上,这是我对这篇文章的参考。

下面改编他们的示例:

首先,您需要一个HKLMSOFTWAREClasses ProgID,用于说明如何处理提供给它的任何输入(您的输入可能已经存在):

HKLMSOFTWAREClasses
     MyApp.ProtocolHandler //this is the ProgID, subkeys are its properties
        (Default) = My Protocol //name of any type passed to this
        DefaultIcon
           (Default) = %ProgramFiles%MyAppMyApp.exe, 0 //for example
        shell
           open
              command
                 (Default) = %ProgramFiles%MyAppMyApp.exe %1 //for example

然后在Capabilities项中使用 DefaultProgram 信息填充注册表:

HKLMSOFTWAREMyApp
    Capabilities
       ApplicationDescription
           URLAssociations
              myprotocol = MyApp.ProtocolHandler //Associated with your ProgID

最后,向 DefaultProgram 注册应用程序的功能:

HKLMSOFTWARE
      RegisteredApplications
         MyApplication = HKLMSOFTWAREMyAppCapabilities

现在所有"myprotocol:"链接都应该触发%ProgramFiles%MyAppMyApp.exe %1

旁注,因为这是谷歌搜索此类问题时发现的最佳答案:确保 shell 命令打开中的路径是应用程序的正确路径。我花了一整天的时间调试问题,这似乎只影响Windows 10上的Chrome和Edge。他们从未像 Firefox 那样触发协议处理程序。问题出在哪里?混合使用的.bat文件的路径 \ 和/斜杠。在路径中只使用适当的\斜杠使Edge&Chrome突然能够接收请求。

LaunchUriAsync(Uri)

启动与指定 URI 的 URI 方案名称关联的默认应用。在这种情况下,您可以允许用户指定。

http://msdn.microsoft.com/library/windows/apps/Hh701476

        // Create the URI to launch from a string.
        var uri = new Uri(uriToLaunch);
        
        // Calulcate the position for the Open With dialog.
        // An alternative to using the point is to set the rect of the UI element that triggered the launch.
        Point openWithPosition = GetOpenWithPosition(LaunchUriOpenWithButton);
        
        // Next, configure the Open With dialog.
        // Here is where you choose the program.
        var options = new Windows.System.LauncherOptions();
        options.DisplayApplicationPicker = true;
        options.UI.InvocationPoint = openWithPosition;
        options.UI.PreferredPlacement = Windows.UI.Popups.Placement.Below;
        
        // Launch the URI.
        bool success = await Windows.System.Launcher.LaunchUriAsync(uri, options);
        if (success)
        {
           // URI launched: uri.AbsoluteUri
        }
        else
        {
            // URI launch failed.  uri.AbsoluteUri
        }
        

相关内容

  • 没有找到相关文章

最新更新