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

时间:2013-04-08 22:56:59

标签: winapi windows-8 microsoft-metro

我有两个版本的自定义软件。 Modern / Metro应用程序(AppM)和我的旧桌面应用程序(AppD)。我已经使用很好理解的清单为AppM创建了一个自定义协议。我已经编辑了注册表,为AppD制作了一个自定义协议处理程序,并通过提供协议并点击输入“AppD://”测试我确实可以通过运行对话框(WIN + R)中的协议激活启动AppD这个案例。我希望能够从AppM和AppD从AppD启动AppM。我为每个人添加了处理程序。在AppD中,我正在使用Process.Start(uri),在AppM中,我正在使用Launcher.LaunchUriAsync(uri)。我可以从AppD启动AppM,但我从来没有从AppM启动AppD。我用谷歌搜索,找不到任何引用。我认为这是不可能的,可能与权限有很大关系。由于这项任务在项目中落到了我的身上,我需要证明这是不可能的或找到解决方案。

我已经使用C#/ XAml以及HTML / JS对此进行了测试,并且发现调用Launcher.LaunchUriAsync(uri).when()成功函数很有趣,但成功标志为false。没有错误(或至少错误的错误功能)。我想得到一个更好的错误信息,我现在正试图以这种方式进行挖掘。

因此,对实际问题的帮助,或者对如何调试这一问题的帮助都将非常感激。

更新:要删除我自己的代码,我下载并安装了launch by association example,只需将 var uriToLaunch =“http://bing.com更改为 var uriToLaunch =“ AppD:“,每次都失败了。这个协议在注册表中关联,我用来验证这个的方法是通过桌面上的WIN + R运行它,应用启动就好了。

1 个答案:

答案 0 :(得分:0)

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