不,这不是恶意软件。我正在尝试制作一个PC助手工具来杀死所有非Windows进程的任务,但在此过程中,它会自行杀死。
这是一个控制台应用程序,所以我试着解除cmd.exe杀死,但它仍然会杀死我的程序。
有这样的方式吗?
if (process.ToString == this.ExecutableName)
答案 0 :(得分:2)
它比
更容易Process self = Process.GetCurrentProcess() ;
foreach( Process p in Process.GetProcesses().Where( p => p.Id != self.Id ) )
{
p.Kill() ;
}
如果你需要担心你的父进程(所以你不要杀死启动你的进程的命令shell,问题“How can I get the PID of the parent process of my application”的答案应该引导你。
答案 1 :(得分:0)
如果从解决方案文件夹运行应用程序,您的进程将在任务管理器中轻松识别,例如:consoleApplication1.exe
您可以通过以下方式获取流程名称:
var cb = Assembly.GetExecutingAssembly().CodeBase;
var processName = Path.GetFileName(cb);
您将在任务管理器的进程列表中看到,如果您正在调试并且您已经启用了Visual Studio托管过程,那么该过程的名称会有所不同。检查。在这个例子中,进程名称是
consoleApplication1.vshost.exe
您可以通过右键单击项目并单击"属性"取消选中此选项。然后选择" Debug"。你应该看到一个复选框说"启用visual studio hosting process"。取消选中该复选框。
您的流程名称将是
ConsoleApplication1.exe中
答案 2 :(得分:0)
List<string> safeProcs = new List<string>() { "App1", "App2", "App3" };
List<Process> procs = Process.GetProcesses()
.Where(p => !p.Equals(Process.GetCurrentProcess()) && !safeProcs.Contains(p.ProcessName))
.ToList();
procs.ForEach(p => p.Kill());
答案 3 :(得分:-1)
您可以使用此程序:
private void KillProcess(string _process)
{
Process[] procs = Process.GetProcesses();
foreach (Process proc in procs)
{
if (proc.ProcessName == _process)
{
proc.Kill();
proc.WaitForExit();
}
}
}
然后:
KillProcess(this.ExecutableName);