C# 获取嵌套应用程序的父级
我认为这不应该被标记为复制品 这是我的设想。我需要检查应用程序是否正在RemoteApp会话中运行。 RemoteApp启动一个应用程序菜单窗口,然后启动其他应用程序,因此链应如下所示C# 获取嵌套应用程序的父级,c#,process,C#,Process,我认为这不应该被标记为复制品 这是我的设想。我需要检查应用程序是否正在RemoteApp会话中运行。 RemoteApp启动一个应用程序菜单窗口,然后启动其他应用程序,因此链应如下所示 rdpinit.exe > appmenu.exe > myapp.exe 因此,我需要完成以下工作。检查myapp.exe的父进程,它应该返回appmenu.exe,然后我需要知道哪个启动的appmenu.exe应该返回rdpinit 顺便说一句,rdpinit.exe是RemoteApp 我现在
rdpinit.exe > appmenu.exe > myapp.exe
因此,我需要完成以下工作。检查myapp.exe的父进程,它应该返回appmenu.exe,然后我需要知道哪个启动的appmenu.exe应该返回rdpinit
顺便说一句,rdpinit.exe是RemoteApp
我现在正在做下面的事情,但还没到关键的地步
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;
}
}
我也试了一会儿
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没有实际启动应用程序时,情况会是这样的对不起,你的问题?可能是@HansPassant的重复版本不是真正的重复版本,也没有回答我的问题。我从来没听说过。我只能得到appmenu。myapp应返回父应用程序菜单。appmenu然后应该返回父rdpinit,但它在链中没有那么远。@sam更新了文章