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
上下文中公开。 所以你无法启动你想要的任何东西。