Windows 8 通过PID检测在WinRT模式下运行的应用程序

Windows 8 通过PID检测在WinRT模式下运行的应用程序,windows-8,microsoft-metro,windows-runtime,Windows 8,Microsoft Metro,Windows Runtime,概述: 我需要通过进程/PID检测给定的应用程序是否在WinRT(也称为“Metro”)模式下运行。有什么好办法吗 失败的尝试和观察: OpenProcess()和调用检查!=APPMODEL_ERROR_NO_PACKAGE:这似乎适用于某些进程,而其他进程(如Chrome)在Metro模式下运行时无法通过检查 Metro应用程序始终由svchost.exe托管(例如其父应用程序) 有什么想法吗?请省略任何“不要那样做”或“为什么?”回答,因为它们对这个特定问题没有帮助。如果Metro应用

概述
我需要通过进程/PID检测给定的应用程序是否在WinRT(也称为“Metro”)模式下运行。有什么好办法吗

失败的尝试和观察

  • OpenProcess()和调用检查!=APPMODEL_ERROR_NO_PACKAGE:这似乎适用于某些进程,而其他进程(如Chrome)在Metro模式下运行时无法通过检查
  • Metro应用程序始终由svchost.exe托管(例如其父应用程序)

有什么想法吗?请省略任何“不要那样做”或“为什么?”回答,因为它们对这个特定问题没有帮助。

如果Metro应用程序正在运行WWA小程序,请从PID获取命令行参数,并查看是否为WWAHOST.exe。并非所有metro应用程序都以WWA小程序运行,例如,IE在metro模式下以独立exe运行

这听起来可能有点含糊不清,但在检测IE是否处于metro模式时对我起到了作用。 metro模式下的IE进程仍然是iexplore.exe。它在高速模式下的根父进程是Wininit.exe,在非高速模式下是explorer.exe。
因此,找到IE的PID的根父PID,然后从父PID获取父进程名称,然后将其与“Wininit.exe”或“Explorer.exe”进行比较。如果Metro应用程序正在运行WWA Applet,则从PID获取命令行参数,并查看是否为WWAHOST.exe。并非所有metro应用程序都以WWA小程序运行,例如,IE在metro模式下以独立exe运行

这听起来可能有点含糊不清,但在检测IE是否处于metro模式时对我起到了作用。 metro模式下的IE进程仍然是iexplore.exe。它在高速模式下的根父进程是Wininit.exe,在非高速模式下是explorer.exe。
因此,找到IE的PID的根父PID,然后从父PID获取父进程的名称,然后将其与“Wininit.exe”或“Explorer.exe”进行比较。

如果进程在高速模式下运行,则返回true。请注意,如果检测应用程序作为服务运行,则此调用始终返回false。

如果进程以高速模式运行,则将返回true。请注意,如果检测应用程序作为服务运行,则此调用始终返回false。

您如何部署该应用程序?通过软件包?哪个应用程序?调用应用程序(需要此信息)是标准Windows服务。您尝试验证的应用程序。因为如果应用程序没有正确地作为包部署,那么它就不会有我需要的任何包信息来验证任意PID。GetPackageId()是为了实现我的目标而进行的一次“黑客”尝试,但如上所述,这对许多应用程序都没有帮助。我试图指出的一点是,如果GetPackageId失败,很可能是因为它是一个部署不正确的应用程序。如果您只需要从应用商店验证正确部署的应用程序(例如在应用程序容器中运行的应用程序),那么您的GetPackageId解决方案可能会成功。您如何部署应用程序?通过软件包?哪个应用程序?调用应用程序(需要此信息)是标准Windows服务。您尝试验证的应用程序。因为如果应用程序没有正确地作为包部署,那么它就不会有我需要的任何包信息来验证任意PID。GetPackageId()是为了实现我的目标而进行的一次“黑客”尝试,但如上所述,这对许多应用程序都没有帮助。我试图指出的一点是,如果GetPackageId失败,很可能是因为它是一个部署不正确的应用程序。如果您只需要从应用商店验证正确部署的应用程序(例如在应用程序容器中运行的应用程序),那么您的GetPackageId解决方案可能会成功。