2

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

我已经使用 C#/XAml 以及 HTML/JS 对此进行了测试,有趣的是发现调用了 Launcher.LaunchUriAsync(uri).when() 成功函数,但成功标志为 false。没有错误(或者至少永远不会命中 err 函数)。我想获得更好的错误消息,我目前正在尝试以这种方式进行挖掘。

因此,对于实际问题的帮助或有关如何调试的帮助将不胜感激。

更新:为了消除我自己的代码,我下载并安装了关联启动示例,只需将var uriToLaunch=“ http://bing.com更改为var uriToLaunch=“AppD:”,每次都失败。该协议在注册表中关联,我用来验证这一点的方法是使用桌面上的 WIN+R 运行它,并且应用程序可以正常启动。

4

1 回答 1

0

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

于 2013-05-18T20:30:38.057 回答