[英]Creating a child Process C# win32 API
我正在使用CreateProcess MSDN call()手动启动应用程序,这是我的代码
void LaunchProg()
{
STARTUPINFO si = new STARTUPINFO();
si.cb = Marshal.SizeOf(si);
si.lpDesktop = "testProg";
PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
var lpCurrentDirectory = Path.GetDirectoryName(executablePath);
CreateProcess("c:\Windows\System32\notepad.exe", null,
IntPtr.Zero, IntPtr.Zero, true,
NORMAL_PRIORITY_CLASS, IntPtr.Zero, lpCurrentDirectory, ref si, ref pi);
}
该代码可以正常工作,并在指定的桌面“ testProg”中启动该程序,但是问题是,当notepad.exe创建具有新窗口的子进程时。 此窗口显示在“默认”桌面中,而不显示在“ testprog”桌面视图(活动桌面视图)中
对于在同一活动桌面内生成的所有子窗口,不确定哪个参数设置不正确。 我看了一下文档,对我来说还不清楚。
关于观察的更新:子进程不是从启动的应用程序继承的,而是从默认桌面运行的系统进程的子进程。
有指针吗? 提前致谢!
从有关线程和桌面的MSDN文档中 ,如果在STARTUPINFO中指定了桌面,则使用该桌面,否则将使用该进程连接到的Windows工作站的默认桌面。 在您的情况下,记事本似乎没有标记可继承桌面的句柄,或者正在执行不继承句柄的CreateProcess。 也许您可以附加一个调试器,然后查看用哪个参数调用CreateProcess?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.