【问题标题】:How to close metro application programmly from other process?如何从其他进程中以编程方式关闭 Metro 应用程序?
【发布时间】:2016-11-24 14:20:58
【问题描述】:

我需要的是在 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):

所以,我的想法已经不多了。有什么帮助吗?

更新:

我的进程列表可能会有所帮助。这是在我杀死任何东西之前:

audiodg : 3200 命令:4588 主机:5820 csrss : 2144 csrss : 416 csrss : 480 部署管理服务:1756 粗细:796 dwm : 2852 探险家:1592 空闲:0 探索:5696 探索:5644 登录界面:2140 小学生:572 rdpclip:3540 收货人:1668 运行dll32:1432 SACM监视器:3344 SACSrv : 1888 搜索索引器:2312 发件人:968 服务:564 短信:312 线轴v:1340 sqlwriter:1000 服务器主机:1416 服务器主机:780 服务器主机:328 服务器主机:856 服务器主机:676 服务器主机:2576 服务器主机:2712 服务器主机:1376 服务器主机:832 服务器主机:1004 服务器主机:632 服务器主机:1608 系统:4 任务主机:6036 任务主机:3040 任务主机:1440 VSSVC : 2732 初始化:464 登录:524 登录:2416 WmiPrvSE : 168 WUDFHost : 1096

【问题讨论】:

  • IE(桌面/地铁)使用多个进程,确保你杀死了所有进程
  • 感谢您的回答,请查看我对 Michael 的回复。

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


【解决方案1】:

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

例如

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

意思是关闭一个不会关闭chrome

要将所有进程关闭到网络浏览器之类的东西,请尝试以下操作

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

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

【讨论】:

  • 感谢您的回答!但这似乎不是我的情况,至少有两个原因:1)我对任何 Metro 应用程序都有同样的问题(我已经测试过内置的微软软件,如音乐、视频、金融等)和 2)甚至如果我杀死所有标有 ie 名称的进程,它还活着。我添加到主要问题中的进程列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2013-02-05
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多