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

Register an exe to custom protocol handler using packaging project

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

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

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

要在您的程序包中为 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