检查进程是否在同一用户C#下运行

时间:2017-05-29 09:42:52

标签: c# session winapi kernel32

我正在尝试检查进程是否已在当前活动的会话ID下运行。

[DllImport("kernel32.dll")]
static extern bool ProcessIdToSessionId(uint dwProcessId, out uint pSessionId);
[DllImport("kernel32.dll")]
private static extern uint WTSGetActiveConsoleSessionId();


public static bool CheckCurrentuser()
    {
        uint sessionID;
        //get all process id's
        Process[] localByName = Process.GetProcessesByName("notepad");
        if (localByName.Length == 0)
        { return false; }
        else
        {           
        uint[] procarray = new uint[localByName.Length];
        for (int i = 0; i < localByName.Length; i++)
            {
            procarray[i] = Convert.ToUInt32(localByName[i].Id);
            ProcessIdToSessionId(procarray[i], out sessionID);
            if (sessionID == WTSGetActiveConsoleSessionId())
                {
                return true;
                }
            }
        return false;
        }
    }

但是,使用上面的代码,我在使用多用户RDP会话进行测试时遇到了一些问题:

  1. WTSGetActiveConsoleSessionId()似乎正在返回1,即使这很难,这不是一个真正“活跃”的会议。
  2. ProcessIdToSessionId()是不一致的,如果进程在用户下运行,则返回正确的会话ID。当我在不同的用户下测试它时,它返回会话ID 0(服务)。
  3. 有什么建议吗?

    由于

0 个答案:

没有答案