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

时间:2018-01-03 14:22:00

标签: c# uwp launcher ui-thread microsoft-edge-extension

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

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

即使在发布模式下还是没有连接调试器,如何强制{-1}}在UI-Thread上执行?

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

LaunchFileAsync

但我的问题是在{-1}}的上下文中抓住了 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() } }); })); 引用。

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

即使使用

Dispatcher
如果没有附加调试器,

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

1 个答案:

答案 0 :(得分:0)

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