2013-02-07 174 views
4

我是Win32 C++编程的新手。 现在,我想创建一个应用程序,它能够托管一个地铁(AppContainer)应用程序。似乎有可能使用这些COM接口:在桌面应用程序中托管地铁应用程序

  • IApplicationDesignModeSettings(MSDN link
  • IApplicationActivationManager(用于启动Metro应用)

我能够启动正常使用IApplicationActivationManager的应用程序,但要能够在窗口内托管应用程序,应用程序需要在设计模式下启动。为了能够在设计模式下启动应用程序,我需要设置IApplicationDesignModeSettings,它需要初始化IInitializeWithWindow(MSDN link)。 IInitializeWithWindow的Initialize()方法需要一个“代理窗口”hwnd。这是我的问题所在。我使用标准CreateWindow()和空回调创建了一个窗口,使用该窗口HWND作为IInitializeWithWindow-> Initialize()参数。但是不是返回S_OK,而是返回E_ACCESSDENIED错误。这是为什么发生? “代理窗口”是什么意思?可能的解决方案是什么?

+0

我不确定这是可能的。 – Andy

+0

为什么:)我提到的接口是Visual Studio和Blend用于构建Windows应用商店应用程序的目的,因此设计模式 - 您是否在构建某种类型的附加/测试框架? –

+0

这个项目的主要目的是为了满足我的好奇心:D。 我知道这是可能的,因为有些已经实现了这个,比如stardock的start8和RetroUI pro。 – jamestut

回答

0

由于Windows 8沙箱模型,您无法在桌面应用程序中托管Metro应用程序。 Metro应用程序由一个特殊进程(wwahost.exe)托管,该进程利用代理访问系统级资源。通过任何其他进程托管Metro应用程序意味着有人可以扮演“中间人”并嗅探/操纵系统请求,这是不可接受的风险。另一方面,您可以通过单独的虚拟机来托管Metro应用。