在桌面应用程序中托管metro应用程序

时间:2013-02-07 13:24:08

标签: c++ winapi windows-8 microsoft-metro

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

  • IApplicationDesignModeSettings(MSDN link
  • IApplicationActivationManager(用于启动metro应用程序)

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

1 个答案:

答案 0 :(得分:0)

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