回答 展示申请运行的方法?

马修罗德韦尔

新成员
加入
2020年8月13日
消息
3
编程经验
Beginner
下午,我正在为我们的管理员创建一个应用程序。我希望它显示用户使用的应用程序。例如,我想检查用户打开单词的服务器。首先是在C#中可以做到这一点,或者有更好的方法来做到这一点。我希望能够向他们展示Incase,具有Tthat软件的任何问题

谢谢......善良
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,892
地点
切萨皮克,va.
编程经验
10+

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,892
地点
切萨皮克,va.
编程经验
10+
在回复时,我更新了#2。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
是的,这是可能的。当然,如果它可以在任务管理器中完成,它可以在您自己的应用程序中完成。

根据您想要做的,可能是一个互斥锁是一种更好的方式?迈出互斥锁的方式,您可以授予对进程的访问权限。您可以使用此伪代码作为您的示例开始:
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;
        }
我认为互斥锁的方法更好,因为您也可以收回对应用程序的控制。或者如果你想去跳伞运动员建议,试试这样的东西。我已经在下面测试过那个,它工作正常:
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;
        }
 
最佳 底部