获取嵌套应用程序的父级

时间:2014-02-13 15:19:19

标签: c# process

我认为这不应该标记为重复

这是我的情景。我需要检查一个应用程序是否在RemoteApp会话中运行。 RemoteApp启动一个应用程序菜单窗口,然后启动其他应用程序,因此链应如下所示。

rdpinit.exe > appmenu.exe > myapp.exe

所以我需要完成以下任务。检查应该返回appmenu.exe的myapp.exe的父进程,然后我需要知道应该返回rdpinit的appmenu.exe是什么。

btw rdpinit.exe是RemoteApp

我现在正在做以下事情,但无法达到rdpinit

的程度
        public static string IsRemoteApp()
    {
        Process currentProc = ParentProcessUtilities.GetParentProcess();
        do
        {
            currentProc = GetParentProcess(currentProc.Id);
            if (currentProc != null)
            {
                if (currentProc.ProcessName.Equals("rdpinit"))
                {
                    //return true;
                }
            }
        }
        while (currentProc != null);
        //return false;
        return currentProc.ProcessName;
    }

    private static Process GetParentProcess(int procId)
    {
        try
        {
            string query = string.Format("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId = {0}", procId);
            ManagementObjectSearcher search = new ManagementObjectSearcher("root\\CIMV2", query);
            ManagementObjectCollection.ManagementObjectEnumerator results = search.Get().GetEnumerator();
            if (!results.MoveNext())
            {
                return null;
            }

            ManagementBaseObject queryObj = results.Current;
            uint parentID = (uint)queryObj["ParentProcessId"];
            return Process.GetProcessById((int)parentID);
        }
        catch
        {
            return null;
        }
    }

我也试过了一个while循环

 Process currentProc = ParentProcessUtilities.GetParentProcess();

            while (GetParentProcess(currentProc.Id) != null)
            {
                currentProc = GetParentProcess(currentProc.Id);
            }

            return currentProc.ProcessName;

我只能得到appmenu.exe

我还在想什么,我不相信这一点总是可以假设,但可能是。 获取myapp的会话ID,抓取rpdinit的进程[]。如果rdpinit等于相同的会话ID,那么我可以假设它是由RemoteApp启动的。

似乎可能存在这样的情况:当RemoteApp实际上没有启动应用程序时,这将是真实的

0 个答案:

没有答案