Winapi 从现代应用程序激活桌面应用程序的Windows 8协议

Winapi 从现代应用程序激活桌面应用程序的Windows 8协议,winapi,windows-8,microsoft-metro,Winapi,Windows 8,Microsoft Metro,我有两个版本的自定义软件。Modern/Metro应用程序(AppM)和my legacy Desktop应用程序(AppD)。我已经使用大家熟知的清单为AppM创建了一个自定义协议。我对注册表进行了编辑,为AppD创建了一个自定义协议处理程序,并通过提供协议并在本例中按enter键“AppD://”,测试了我是否确实可以使用Run对话框(WIN+R)中的协议激活来启动AppD。我希望能够从AppD启动AppM,并从AppM启动AppD。我已经为每个添加了处理程序。在AppD中我使用Proces

我有两个版本的自定义软件。Modern/Metro应用程序(AppM)和my legacy Desktop应用程序(AppD)。我已经使用大家熟知的清单为AppM创建了一个自定义协议。我对注册表进行了编辑,为AppD创建了一个自定义协议处理程序,并通过提供协议并在本例中按enter键“AppD://”,测试了我是否确实可以使用Run对话框(WIN+R)中的协议激活来启动AppD。我希望能够从AppD启动AppM,并从AppM启动AppD。我已经为每个添加了处理程序。在AppD中我使用Process.Start(uri),在AppM中我使用Launcher.launchurisync(uri)。我可以让AppM从AppD启动,但我从未让AppD从AppM启动。我在谷歌上搜索过,找不到任何与此相关的参考资料。我认为这是不可能的,可能与权限有关。由于这个任务落在了我的项目上,我需要证明这是不可能的,或者找到一个解决方案

我已经用C#/XAml和HTML/JS测试过了,有趣的是找到了Launcher.launchurisync(uri).when()成功函数被调用,但成功标志为false。没有错误(或者至少从未命中err函数)。我想得到一个更好的错误信息,我目前正试图通过这种方式挖掘

因此,非常感谢您对实际问题的帮助,或者对如何调试这两个问题的帮助

更新:为了消除我自己的代码,我下载并安装了,并简单地将var uriToLaunch=“”更改为var uriToLaunch=“AppD:”,每次都失败。此协议在注册表中关联,我用于验证此协议的方法是从桌面使用WIN+R运行它,应用程序启动正常。

是一个应用程序,允许您使用URI调用从metro应用程序运行批处理文件。这应该能解决你的问题。
只需在metro应用程序中创建一个批处理文件,然后利用BART执行批处理文件。在上面的链接中可以找到代码片段。

根据对一些msdn链接的阅读,这看起来是可能的,但不是决定性的。我建议做几件事——1)参考msdn中这些链接下的备注并尝试一下。2) 下载此文件并尝试使用FlowOpen启动。感谢您提供有关关联示例的提示。我已经更新了帖子,也加入了我在那里的冒险经历。从现代应用程序启动桌面应用程序可能被阻止。Microsoft拒绝这样做的应用程序。