C# 有没有办法控制.NET中的进程继承哪些打开的句柄?

C# 有没有办法控制.NET中的进程继承哪些打开的句柄?,c#,.net,winapi,C#,.net,Winapi,我正在用C#中的另一个流程创建一个流程,如下所示: process = new Process(); process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardError = true; process.StartInfo.RedirectStandardInput = true; process.StartInfo.RedirectStandardOutput = true; process.Sta

我正在用C#中的另一个流程创建一个流程,如下所示:

process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = "process.exe";
process.OutputDataReceived += ProcessOnOutputDataReceived;
然后在一个单独的线程中,我调用:

process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
这使我能够在进程之间建立基本的IPC

我发现这个进程似乎从父进程继承了一个打开的文件句柄。因此,父进程无法再处理该文件


有没有办法防止这种情况发生?或者有没有一种方法可以强制子进程在继承句柄后释放句柄?

您需要与
PROC\u THREAD\u ATTRIBUTE\u handle\u LIST
一起使用,以精确设置将被继承的句柄列表(如果您需要句柄继承)。因此,您需要使用<代码> StutpIfFEX < /C>,<代码> ExpDeDeStutupPofIONION//COD> FLAGIS有一个方法来处理这个过程对象,或者任何C++代码示例,如何做呢?在C++中,不难做到这一点,我如何知道C?但是在这种情况下会有更多的src代码。这是可能的吗?我不能确切地说,因为我不知道并使用c#但是从快速查看-几乎可以肯定没有-没有这样的功能没有,只有
进程
类是不可能的。您需要P/Invoke
UpdateProcThreadAttribute
;可以使用或属性获取进程的句柄。请参阅以获得解决方案。好的,这是一个开始。有谁能告诉我,为了仍然获得stdin/out/err重定向功能,
lpAttributeList
中需要什么?