正在创建子进程C#win32 API

本文关键字:C#win32 API 子进程 创建 | 更新日期: 2023-09-27 18:19:33

我正在使用CreateProcess MSDN调用()手动启动应用程序,下面是我的代码

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"桌面视图(活动桌面视图)中

不确定要在同一活动桌面中派生的所有子窗口的哪个参数设置不正确。我看了一下文件,对我来说并不清楚。

观察更新:子进程不是从启动的应用程序继承的,而是在默认桌面上运行的系统进程的子进程。

有指针吗?提前感谢!

正在创建子进程C#win32 API

从有关线程和桌面的MSDN文档中,如果在STARTUPINFO中指定了要使用的桌面,则将使用进程所连接的windows工作站的默认桌面。在您的情况下,记事本似乎没有将桌面的句柄标记为可继承,或者它正在执行一个不继承句柄的CreateProcess。也许你可以附加一个调试器,看看用什么参数调用CreateProcess?