【发布时间】:2012-08-28 21:59:31
【问题描述】:
概述:
我需要通过进程/PID 检测给定的应用程序是否在 WinRT(又名“Metro”)模式下运行。有什么好的方法吗?
失败的尝试和观察:
- OpenProcess() 并调用 Call GetPackageId() 检查 != APPMODEL_ERROR_NO_PACKAGE:这似乎适用于某些进程,而在 Metro 模式下运行的 Chrome 等其他进程无法通过检查。
- Metro 应用似乎总是由 svchost.exe 托管(例如它们的父级)
有什么想法吗?请省略任何“不要那样做”或“为什么?”回答,因为它们对这个特定问题没有帮助。
【问题讨论】:
-
您如何部署应用程序?通过包裹?
-
哪个应用程序?调用应用程序(需要此信息)是标准 Windows 服务。
-
您尝试验证的应用程序。因为如果应用程序没有正确部署为一个包,那么它就不会有任何包信息
-
我需要验证任意 PID。 GetPackageId() 是尝试“破解”以实现我的目标,但如上所述对许多应用程序没有帮助。
-
我试图说明的一点是,如果 GetPackageId 失败,很可能是因为它是一个错误部署的应用程序。如果您只需要验证正确部署的应用程序 - 例如那些在应用程序容器中运行的应用程序容器,那么您的 GetPackageId 解决方案可能会成功。
标签: windows-8 microsoft-metro windows-runtime