使用打包项目将exe注册到自定义协议处理程序

时间:2018-12-18 12:19:00

标签: uwp registry win-universal-app launch desktop-bridge

我正在尝试使用打包项目将exe注册到自定义协议。我在包装项目的appxmanifest中添加了以下代码。

<Extensions>
 <uap:Extension Category="windows.protocol" Executable="Assets\app.exe">
   <uap:Protocol Name="app.custom.protocol" />
 </uap:Extension>
</Extensions>

但是我无法使用launchUriAsync方法从uwp应用程序启动exe。它只是显示对话框,要求一个应用程序打开协议。

1 个答案:

答案 0 :(得分:1)

要在您的程序包中注册EXE的自定义协议,需要在您的appxmanifest中声明它。请注意,您的包中可以包含多个元素。因此,例如,如果您的主应用程序是UWP,并且您还具有要注册为自定义协议处理程序的Win32可执行文件(WPF),则必须像下面这样编写包清单。请注意,设置AppListEntry = None将阻止Win32 EXE在开始菜单中显示。

<Applications>
 <Application Id="UWP" Executable="Uwp.exe" EntryPoint="Uwp.App">
  <uap:VisualElements … />
 </Application>
 <Application Id="WPF" Executable="WpfApp2\WpfApp2.exe" EntryPoint="Windows.FullTrustApplication">
  <uap:VisualElements AppListEntry="none" … />
  <Extensions>
   <uap3:Extension Category="windows.protocol">
    <uap3:Protocol Name="app.custom.protocol" />
   </uap3:Extension>
  </Extensions>
 </Application>
</Applications>

但是,如果您要从UWP启动Win32 EXE,则最好使用FullTrustProcessLauncher API,而不要执行协议启动:

https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.FullTrustProcessLauncher