【问题标题】:Kill process by current user [duplicate]当前用户杀死进程[重复]
【发布时间】:2012-07-13 07:51:40
【问题描述】:

可能重复:
How do you kill a process for a particular user in .NET (C#)?

在我的更新程序应用程序中,我需要在更新之前终止主程序。

我正在使用代码来终止更新程序应用程序中的进程,但它会终止具有该名称的所有进程,因此它会终止同一台机器上其他用户的进程。有没有办法只为当前用户杀死进程?

这是我目前的代码:

        foreach (System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses())
        {
            if (myProc.ProcessName == "ProgramName")
            {
                myProc.Kill();
            }
        }

【问题讨论】:

  • 别介意你应该能够比杀死这样的进程做得更好:如果进程仍在为其他用户运行,你将如何更新二进制文件?
  • 看起来有人在 [这里] (stackoverflow.com/questions/426573/…) 提出了同样的问题
  • 使用Process.GetProcessesByName("ProgramName")而不是爬取所有系统进程。

标签: c#


【解决方案1】:

如果您不介意 WMI,您可以使用 Windows Management Instrumentation (WMI) 来实现您的要求

例子:

    System.Management.ManagementObjectSearcher Processes = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_Process Where Name ='notepad.exe' ");

    string user = "JohnDoe";
    foreach (System.Management.ManagementObject process in Processes.Get())
    {
        if (process["ExecutablePath"] != null)
        {
            string[] OwnerInfo = new string[2];
            process.InvokeMethod("GetOwner", (object[])OwnerInfo);

            if (OwnerInfo[0] == user)
            {
                process.Delete();
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2014-09-16
    • 2021-01-19
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多