Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows应用商店应用程序与本机桌面应用程序之间的通信_Windows_Microsoft Metro_Windows Runtime_Communication - Fatal编程技术网

Windows应用商店应用程序与本机桌面应用程序之间的通信

Windows应用商店应用程序与本机桌面应用程序之间的通信,windows,microsoft-metro,windows-runtime,communication,Windows,Microsoft Metro,Windows Runtime,Communication,!为了简化操作,我将Windows应用商店应用程序(也称为Metro或Modern UI)称为“应用程序”,将普通桌面应用程序称为“应用程序” 我认为,对于已经在市场上建立了应用程序的开发者来说,这仍然是有关应用程序开发的最不清楚但最重要的问题之一: 如何在Windows 8系统上管理应用程序和应用程序之间的通信?(请不要就原则展开辩论——有太多的用例确实需要这样做!) 在过去的几天里,我基本上读了成百上千的文章,但仍然不清楚如何从第一次开始就做好。主要是因为我发现了一些相互矛盾的信息。 在这里

!为了简化操作,我将Windows应用商店应用程序(也称为Metro或Modern UI)称为“应用程序”,将普通桌面应用程序称为“应用程序”

我认为,对于已经在市场上建立了应用程序的开发者来说,这仍然是有关应用程序开发的最不清楚但最重要的问题之一: 如何在Windows 8系统上管理应用程序和应用程序之间的通信?(请不要就原则展开辩论——有太多的用例确实需要这样做!)

在过去的几天里,我基本上读了成百上千的文章,但仍然不清楚如何从第一次开始就做好。主要是因为我发现了一些相互矛盾的信息。 在这里,我想从Windows8最终的可能性的角度重新探讨这个问题

给定情况:

  • 应用程序和应用程序在同一系统上运行
  • 1:1通信
  • 应用程序是本地的(用Delphi编写)
  • 管理员,或者如果需要,甚至系统权限也可用于应用程序
  • 在90%的用例中,应用程序请求由应用程序执行的操作,并收到一些文本结果。此应用程序不应因此而保留或冻结
  • 在10%的情况下,应用程序执行一个操作(由某个事件触发)并通知应用程序-结果可能是:在磁贴上或在已运行和活动的应用程序中显示某些信息,或在可能的情况下运行应用程序/将其带到前台
现在“简单”的问题是,如何实现这一点?

  • 现在是否允许本地Web服务器访问?(我相信这不是很长时间,但现在是自最终发布以来)
  • WCF?(>显然)
  • 本地REST/SOAP服务器上的HTTP请求
  • ??(使用RSS/atom响应的另一种Web服务访问形式)
  • (比如说)
  • 其他形式的TCP/IP通信
  • 为输入和输出共享一个文本文件(实际上,简单地考虑一下这会带来伤害,但至少这是MS无法阻止的一种可能性…)
  • 命名管道是不允许的,对吗

这里有一些关于这个主题的讨论,但是大多数都不是最新的,因为微软在发布最终版本的Windows8之前做了很多改变。我不想混淆新旧信息,而是想为我和所有其他Windows应用程序和应用程序开发人员找到一个明确和最新的答案。谢谢大家!

如果您谈论的是要进入存储的应用程序,则不允许通过任何机制与本地系统通信。在某些调试场景中,支持与本地系统通信,以简化应用程序开发

您可以使用文件或协议处理程序从Windows应用商店应用程序启动桌面应用程序,但没有直接通信

所以,重申这一点。。。对于已发布的Windows应用商店应用程序,不允许WinRT与桌面之间进行通信。仅在调试中允许两个环境之间进行通信


PG在不同的地方发布了不允许通信的原因,从安全性到WinRT生命周期(即,您的应用程序被挂起-如何处理:资源、套接字、远程应用程序等-许多故障点)以及存储应用程序不能依赖外部程序这一事实(即,我需要您的本地桌面应用程序/服务才能运行应用程序,但如何安装您的应用程序/服务?您无法集成到商店应用程序中。您可以提供另一个商店桌面应用程序条目,但这是一种糟糕的用户体验。)当然,这些都是高层次的总结。

可以通过一个文件来完成,但没有被阻止。我不是说它漂亮,但这是可能的。我也认为命名管道会起作用,但我不确定。杰夫,你对此有多确定?可笑的是,人们无法尝试它,因为开发的行为显然不同以及商店中安装的应用程序……由于该场景中有很多有用的用例,所以说“不可能”基本上不是一个解决方案。最终,开发人员将通过在localStorage中通过文本文件传递命令和结果来解决此问题。这真的是MS允许的唯一解决方案吗?@DominicHopton更正文件,尽管这不是真正的直接通信:)AFAIK命名管道不起作用。这是基于PG早些时候的声明。也许有什么变化,但我不知道有什么变化。@CodeX我98.72356%确定。:)除非我错过了RTM的一个变化,否则在很长一段时间里,这一直是PG的位置。理解有很多有用的场景,但没有沟通是我的理解。你可以在网页上找到一些关于他们为什么这样做的讨论。我编辑了上面的答案以包含一些原因。很抱歉,这不是您想要的答案,我将在将来的版本中传递反馈以供考虑。行为应该是相同的-一个排除是环回,这是手动启用的。如果你想测试它,不要启用它。如果其他一切都失败了,那么就让VSF5部署包吧。我也不指望能够通过本地文件进行通信。AFAIK、WinRT和桌面目前共享相同的安全令牌,但类似于UAC的拆分令牌系统是明智的,并且很可能在未来的Windows版本中引入。(注意:我在这里猜测,这并不是基于收到的信息。)此外,如果微软对Windows应用商店的应用程序进行任何形式的审核,一旦他们注意到你在做什么,你不会被开除吗?@Harry我想没有办法尝试一下。。。看到微软如此不明智地对待带来ap的整个场景,我真的很难过