Edge:进程内本机扩展和Windows.System.Launcher.LaunchFileAsync

我使用此处所述的进程内机制(通过激活OnBackgroundActivated )开发了边缘浏览器扩展(本机消息传递)。 在OnBackgroundActivated ,或者在OnAppServiceRequestReceived建立的应用服务连接的OnAppServiceRequestReceived中更具体,我试图调用Windows.System.Launcher.LaunchFileAsync(IStorageFile) 。 这似乎不会发生在UI-Thread上(尽管它在调试模式下工作时附带调试器)。

我面临的问题是,应用程序是无头的,因此没有CoreWindow.GetForCurrentThread().Dispatcher ,也不能从Window.Current检索调度程序。

即使在发布模式下还是没有附加调试器,如何强制在UI-Thread上执行LaunchFileAsync

我知道我可以简单地执行以下操作:

  await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, (async () => { bool success = await Windows.System.Launcher.LaunchFileAsync(shortcut); await args.Request.SendResponseAsync(new ValueSet { { "message", "Launched File: " + success.ToString() } }); })); 

但我的问题是在Application-Class和OnAppServiceRequestReceived的上下文中获取Dispatcher引用。

怎么能实现这一目标? 它甚至可能还是我需要一个完全信任的Win32桌面桥?

即使使用

 CoreDispatcher dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.Dispatcher; 

没有附加调试器时不起作用。 我很好奇是否可以在没有Win32桌面桥的无头UWP应用程序中调用LaunchFileAsync。

你是对的 – 你需要建立一个完全信任的Win32桌面桥。 Dispatcher未在OnAppServiceRequestReceived上下文中公开。 所以你无法启动你想要的任何东西。