2016-11-24 17 views
0

Мне нужно убить запущенное приложение Metro в Windows 8 программно.Как закрыть приложение метро программно из другого процесса?

Будет ли это быть просто простой процесс, я бы написал

Process.GetProcessById(processId).Kill() 

или

var applicationProcess = Process.GetProcessById(processId); 
applicationProcess.CloseMainWindow(); 
applicationProcess.Close(); 

, но они не работают в моем случае.

Я пробовал и эту функцию WinAPI для оканчивающихся процессов

[DllImport("kernel32.dll", SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode); 

Это фактически завершает процесс, и я могу видеть, что этот процесс не существует в диспетчере задач больше, но до сих пор я могу видеть приложение полуживой (IE на картинке):

still alive IE

Итак, я бегу из идей. Любая помощь?

ОБНОВЛЕНО:

Возможно мой список процессов будет какой-либо помощи.Вот он, прежде чем я убил что-нибудь:

audiodg: 3200 CMD: 4588 conhost: 5820 CSRSS: 2144 CSRSS: 416 CSRSS: 480 DeploymentManagerService: 1756 DWM: 796 DWM: 2852 проводник: 1592 вхолостую: 0 Iexplore: 5696 Iexplore: 5644 LogonUI: 2140 LSASS: 572 rdpclip: 3540 приемник: 1668 rundll32: 1432 SACMonitor: 3344 SACSrv: 1888 SearchIndexer: 2312 Отправитель: 968 услуги: 564 SMSs: 312 Spoolsv: 1340 SQLWriter: 1000 Svchost: 1416 Svchost: 780 Svchost: 328 Svchost: 856 Svchost: 676 Svchost: 2576 Svchost: 2712 Svchost: 1376 Svchost: 832 Svchost: 1004 Svchost: 632 Svchost: 1608 система: 4 taskhost: 6036 taskhost: 3040 taskhostex: 1440 VSSVC: 2732 wininit: 464 Winlogon: 524 Winlogon: 2416 Wmiprvse: 168 WUDFHost: 1096

+0

IE (настольный/метро) использует несколько процессов, убедитесь, что вы убили всех из них – magicandre1981

+0

Спасибо за ответ и, пожалуйста, посмотрите на мой ответ на Майкла. – user1793358

ответ

0

@ magicandre1981 вполне корректно IE будет запускать несколько процессов, чтобы закрывающие один через идентификатор процесса не будет закрывать все приложение целиком только экземпляр с в нем

, например

image of taskmanger

, как вы можете видеть, хром работает на Pid 17816, 3140 .........

смысл закрытия одного не закроется хром

закрыть все процессы, к чему-то, как веб-браузер попробовать следующий

 var proccessCollection = System.Diagnostics.Process.GetProcessesByName("firefox"); 

     foreach (var proccess in proccessCollection) 
     { 
      proccess.Kill(); 
     } 
+0

Спасибо за ответ! Но это, по-видимому, не мое дело по крайней мере по двум причинам: 1) У меня такая же проблема с любым приложением метро (я протестировал микрософ в сборке, такой как музыка, видео, финансы и т. Д.) И 2) даже если я убью все процессы, отмеченные т. н. именем, он все еще жив. Списки процессов, которые я добавил к основному вопросу – user1793358