由PID

2012-08-28 23 views
1

概述檢測應用程序中的WinRT模式下運行:
我需要檢測是否一個給定的應用程序在運行的WinRT(又名「地鐵」)模式下,通過處理/ PID。有沒有這樣做的好方法?由PID

失敗的嘗試和觀察

  • OpenProcess(),並致電致電GetPackageId()檢查= APPMODEL_ERROR_NO_PACKAGE!而在地鐵模式下運行時,其他如鉻這似乎對於某些工藝工作失敗檢查。
  • 地鐵應用出現總是由svchost.exe的

任何想法託管(如他們的父母)?請忽略任何「不要那樣做」或「爲什麼?」因爲它們對這個特定問題沒有幫助。

+0

你如何部署應用程序?通過包? –

+0

哪個應用程序?調用應用程序(需要此信息)是標準的Windows服務。 – NuSkooler

+0

您正在嘗試驗證的應用程序。因爲如果應用程序沒有正確部署爲一個包,那麼它不會有任何包信息 –

回答

0

Here是一種使用Process和C#應用程序中與該進程關聯的模塊列表的一種可能的解決方案。

+0

謝謝,這看起來像一個可能的解決方法。我希望找到一些更官方/更清潔的東西。 – NuSkooler

0

如果Metro應用程序正在運行WWA Applet,則從PID獲取命令行參數,並查看它是否爲WWAHOST.exe。例如,並非所有metro應用程序都以WWA小程序的形式運行,IE在Metro模式下作爲獨立的exe運行。

這可能聽起來像是一個kludge,但爲我檢測IE是否處於城域模式。 城域模式下的IE進程仍然是iexplore.exe。 Metro模式下的根父進程是Wininit.exe,其中非城域模式是explorer.exe。 所以找到一個IE瀏覽器的PID,然後從父母的PID獲取父的進程名則比較反對「Wininit.exe將」或「Explorer.exe的」過程是否

1
BOOL WINAPI IsImmersiveProcess(_In_ HANDLE hProcess); 

將返回true根父PID在Metro模式下運行。請注意,如果檢測應用程序作爲服務運行,則此調用始終返回false。