如何从其他进程关闭metro应用程序?

时间:2016-11-24 14:20:58

标签: c# .net windows-8 microsoft-metro

我需要的是在Windows 8程序中杀死已启动的Metro应用程序。

这只是一个简单的过程,我会写

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

1 个答案:

答案 0 :(得分:0)

@ magicandre1981非常正确IE将运行多个进程,因此通过其pid关闭一个将不会关闭整个应用程序只是一个实例

例如

image of taskmanger

你可以看到chrome正在pid 17816,3140上运行.........

表示关闭一个不会关闭chrome

关闭所有进程,如网络浏览器,请尝试以下

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

        foreach (var proccess in proccessCollection)
        {
            proccess.Kill();
        }
相关问题