如何获取正在运行的HTML Windows 8应用程序(而不是WWHOST)的名称

我试图得到与给定的ProcessID运行的Windows 8应用程序的名称。 我可以到wwahost,这是运行的进程的真实名称,但我想获得WWHOST实际运行的应用程序的名称。

我看到这个线程http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c9665bf4-00e4-476c-badb-37126efd3f4b/与那个讨论,但没有具体的答案。

有任何想法吗 ?

你想调用GetApplicationUserModelId

提供的示例应用程序允许您传入PID并获取有关应用程序的信息。 例如:

C:\src\GetAppInfo\Debug>GetAppInfo.exe 7400 Process 7400 (handle=00000044) Microsoft.BingWeather_8wekyb3d8bbwe!App 

要移植到C#,

  const int QueryLimitedInformation = 0x1000; const int ERROR_INSUFFICIENT_BUFFER = 0x7a; const int ERROR_SUCCESS = 0x0; [DllImport("kernel32.dll")] internal static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll")] static extern bool CloseHandle(IntPtr hHandle); [DllImport("kernel32.dll")] internal static extern Int32 GetApplicationUserModelId( IntPtr hProcess, ref UInt32 AppModelIDLength, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder sbAppUserModelID); 

然后,你的代码应该是这样的:

  if (sProcessName.ToLower().Contains("wwahost") && ((Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor > 1))) { IntPtr ptrProcess = OpenProcess(QueryLimitedInformation, false, iPID); if (IntPtr.Zero != ptrProcess) { uint cchLen = 130; // Currently APPLICATION_USER_MODEL_ID_MAX_LENGTH = 130 StringBuilder sbName = new StringBuilder((int)cchLen); Int32 lResult = GetApplicationUserModelId(ptrProcess, ref cchLen, sbName); if (ERROR_SUCCESS == lResult) { sResult = sbName.ToString(); } else if (ERROR_INSUFFICIENT_BUFFER == lResult) { sbName = new StringBuilder((int)cchLen); if (ERROR_SUCCESS == GetApplicationUserModelId(ptrProcess, ref cchLen, sbName)) { sResult = sbName.ToString(); } } CloseHandle(ptrProcess); } } 

看看从C#中的引用的DLL执行程序集名称

你可以看看Assembly.GetEntryAssembly()或Assembly.GetExecutingAssembly()eg

 string exeAssemblyName = Assembly.GetEntryAssembly().GetName().Name;