首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过C#关闭windows中的应用程序?

如何通过C#关闭windows中的应用程序?
EN

Stack Overflow用户
提问于 2022-11-11 18:01:38
回答 1查看 39关注 0票数 1

我试图通过C#关闭windows中运行的用户应用程序(应用程序),如word、forxitReader、whatsApp等。

我试图制作一个桌面应用程序来保证在线考试的安全,就像安全的考试浏览器一样。

我的夫人是:

1-只将它们的过程作为一个列表(而不是系统程序)。

2-用Process.kill()杀死他们;

但我不知道怎么做第一步。

我怎样才能得到这些程序的清单?

EN

回答 1

Stack Overflow用户

发布于 2022-11-12 07:03:14

我知道您需要检查进程所有者,以确定它是系统进程还是非系统进程,据我所知,无法通过.NET api获得进程所有者,但您可以通过

代码语言:javascript
运行
复制
Get-Process -IncludeUserName

现在在C#中这样做有点棘手,因为开箱即用,缺少Process类,进行CLI调用很复杂,但是我只能用Cake.Powershell nuget包编写这个解决方案。

代码语言:javascript
运行
复制
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Management.Automation;

using (var powershell = PowerShell.Create())
{
    List<string> illegalProcesses = new List<string>() { "dota2" };
    powershell.AddScript("Get-Process -IncludeUserName");
    var results = powershell.Invoke();

    var nonSystemResults = results.Where(x => !x.Properties["Username"].Value.ToString().StartsWith("NT AUTHORITY"));

    foreach (var result in results)
    {
        var processOwner = result.Properties["Username"].Value as string;
        if (processOwner != null && !processOwner.StartsWith("NT AUTHORITY"))
        {
            var processName = result.Properties["Name"].Value as string;
            if (illegalProcesses.Contains(processName))
            {
                var processID = result.Properties["ID"].Value as int?;
                var doomedProcess = Process.GetProcessById(processID.Value);
                doomedProcess?.Kill();
            }
        }
    }
}

我已经假设,系统进程是由以NT AUTHORITY开头的用户拥有的进程,但您可能会发现,对于特定的用例,您需要不同的筛选器。也就是说,您可以在进程中获得大量的属性,这些属性应该允许您编写自己的筛选器。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74406484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档