我认为这不应该标记为重复
这是我的情景。我需要检查一个应用程序是否在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实际上没有启动应用程序时,这将是真实的