Wie kann ich CMD.exe mit Pseudoconsole lebend halten, auch wenn Elternausgänge beendet sind?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie kann ich CMD.exe mit Pseudoconsole lebend halten, auch wenn Elternausgänge beendet sind?

Post by Guest »

Ich habe server.cs , was den untergeordneten Daemon.exe wie folgt hervorbringt:

Code: Select all

bool success = CreateProcess(
null,
"daemon.exe",
IntPtr.Zero,
IntPtr.Zero,
false,
DETACHED_PROCESS,
IntPtr.Zero,
null,
ref si,
out pi
);
< /code>
Innerhalb des Daemons Ich spawne einen cmd.exe wie folgt: < /p>
string app = @"C:\Windows\System32\cmd.exe";
bool success = CreateProcess(
null,
app,
IntPtr.Zero,
IntPtr.Zero,
false,
EXTENDED_STARTUPINFO_PRESENT,
IntPtr.Zero,
null,
ref si,
out pi
);
< /code>
Wenn ich Server.exe töte, wird auch cmd.exe getötet, was ich auf unbestimmte Zeit bestehen möchte. Wenn ich Daemon.exe mit so etwas wie Console.readline () breche, überlebt es den Server, der wie beabsichtigt mit detached_process beabsichtigt ist, aber aus irgendeinem Grund stirbt Cmd.exe, obwohl er von dem Daemon hervorgebracht wurde. Ich vermute, dass CMD.exe immer noch an die Konsole des Servers angeschlossen ist, aber ich weiß nicht genau und verstehe nicht, warum < /p>
es funktioniert, wenn ich cmd.exe mit Create_new_console -Flag laich, aber ich mache es Verlieren Sie die Pseudoconsole -Funktionalität, die die Ausgabe an die neue Konsole leitet.STARTUPINFOEX
Vorbereitung für Daemon.cs :

Code: Select all

IntPtr lpSize = IntPtr.Zero;
InitializeProcThreadAttributeList(IntPtr.Zero, 1, 0, ref lpSize);

STARTUPINFOEX si = new();
si.lpAttributeList = Marshal.AllocHGlobal(lpSize);

InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, ref lpSize);
si.StartupInfo.cb = Marshal.SizeOf();

UpdateProcThreadAttribute(
si.lpAttributeList,
0,
(IntPtr)PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE,
phPC,
(IntPtr)Marshal.SizeOf(phPC),
IntPtr.Zero,
IntPtr.Zero
);

PROCESS_INFORMATION pi = new();
< /code>
STARTUPINFOEX
Vorbereitung für server.cs :

Code: Select all

STARTUPINFOEX si = new();
PROCESS_INFORMATION pi = new();

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post