已回答  如何显示正在运行的应用程序?

已加入
2020年8月13日
留言内容
3
编程经验
Beginner
下午,我正在为我们的管理员创建一个应用程序。我想让它显示哪些用户使用了哪个应用程序。因此,例如,我想在服务器上检查哪些用户说过单词“ open”。首先,这在C#中是可能的,还是有更好的方法来做到这一点。如果该软件存在任何问题,我希望能够向他们展示

谢谢...要客气
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+

羊皮

知名会员
已加入
2018年9月5日
留言内容
1,982
编程经验
10+
是的,有可能。当然可以,如果可以在任务管理器中完成,那么可以在自己的应用程序中完成。

根据您要执行的操作,互斥体可能是更好的选择?按照Mutex的方式,您可以授予对流程的访问权限。您可以使用以下伪代码作为示例入门:
C#:
        public string GetOwnerOfProcess(string nameOfProcess)
        {
            using (Mutex mutex = new Mutex(false, nameOfProcess, out bool gotAccess))
            {
                try
                {
                    if (!mutex.WaitOne(0, false))
                    {
                        /* Already running */
                        return null;
                    }
                    /* Start your process */
                    Console.WriteLine("Launch me");
                }
                catch (AbandonedMutexException amex)
                {
                    /* Log if abandoned */
                }
                finally
                {
                    mutex.ReleaseMutex();
                }
            }
            return null;
        }
我认为Mutex方法更好,因为您还可以收回对应用程序的控制权。或者,如果您想按照跳伞者的建议去尝试,请尝试这样的事情。我已经测试了下面的一个,它工作正常:
C#:
        public bool IsRunning(string nameOfProcess)
        {
            Process thisProcess_FromID = Array.Find(Process.GetProcesses(), cur_ProcessID => cur_ProcessID.ProcessName == nameOfProcess && cur_ProcessID.SessionId == Array.Find(Process.GetProcesses(), cur_Process => cur_Process.ProcessName.StartsWith(nameOfProcess)).SessionId);

            if (thisProcess_FromID == null)
                Console.WriteLine("Launch me");
            return false;
        }
 
最佳 底部