我试图通过C#关闭windows中运行的用户应用程序(应用程序),如word、forxitReader、whatsApp等。
我试图制作一个桌面应用程序来保证在线考试的安全,就像安全的考试浏览器一样。
我的夫人是:
1-只将它们的过程作为一个列表(而不是系统程序)。
2-用Process.kill()杀死他们;
但我不知道怎么做第一步。
我怎样才能得到这些程序的清单?
发布于 2022-11-12 07:03:14
我知道您需要检查进程所有者,以确定它是系统进程还是非系统进程,据我所知,无法通过.NET api获得进程所有者,但您可以通过
Get-Process -IncludeUserName
现在在C#中这样做有点棘手,因为开箱即用,缺少Process
类,进行CLI
调用很复杂,但是我只能用Cake.Powershell
nuget包编写这个解决方案。
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
开头的用户拥有的进程,但您可能会发现,对于特定的用例,您需要不同的筛选器。也就是说,您可以在进程中获得大量的属性,这些属性应该允许您编写自己的筛选器。
https://stackoverflow.com/questions/74406484
复制相似问题