<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Dos-Pipe Funktion stürzt bei Nicht-Dosbefehl und Dosbefehl &amp;quot;dir&amp;quot; ab]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich hab in einem anderen Forum den Source für eine Dos-Pipe gefunden, der Quelltext sieht so aus ( bitte nicht erschrecken auch wenn er etwas lang aussieht <sup>_</sup>)</p>
<pre><code class="language-cpp">void ExecuteSE (char* szCommand, char *szDestination, int nSize, int nTimeOut)
{
	STARTUPINFO	si;
	PROCESS_INFORMATION	pi;
	SECURITY_ATTRIBUTES sa;
	HANDLE hPipeRead,hPipeWrite;
	DWORD dwBytes;

	//
	// Erstellen der Pipe
	sa.nLength=sizeof(sa);
	sa.bInheritHandle=TRUE;
	sa.lpSecurityDescriptor=NULL;
	CreatePipe(&amp;hPipeRead,&amp;hPipeWrite, &amp;sa, 0);
	//
	// Erstellen des Prozesses
	si.cb=sizeof(STARTUPINFO);
	si.lpReserved=NULL;
	si.lpDesktop=NULL;
	si.lpTitle=NULL;
	si.dwX=0;
	si.dwY=0;
	si.dwXSize=640;
	si.dwYSize=400;
	si.dwXCountChars=0;
	si.dwYCountChars=0;
	si.dwFillAttribute=FOREGROUND_BLUE;
	si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
	si.wShowWindow=SW_HIDE;
	si.cbReserved2=0;
	si.lpReserved2=NULL;
	si.hStdInput=0;
	si.hStdOutput=hPipeWrite;
	si.hStdError=0;
	CreateProcess(NULL, szCommand, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL, NULL, &amp;si, &amp;pi);
    CloseHandle (pi.hThread);
    WaitForSingleObject(pi.hProcess, nTimeOut);
	memset(szDestination, 0, nSize);
	ReadFile(hPipeRead,szDestination, nSize,&amp;dwBytes,NULL);
	return;
}
</code></pre>
<p>Ich hab den Code in eine Funktion gepackt, es funktioniert auch alles einwandfrei, also ich kann im char*szCommand-Argument einen Dosbefehl angeben und bekomme dann die Ausgabe in den String, den ich dem char*szDestination-Argument übergebeben habe. Nur...=) leider bleibt die Funktion hängen wenn es sich nicht um einen Dos-Befehl handelt.Und wenn ich den &quot;dir&quot; Befehl von Dos verwende, so kehrt die Funktion auch nicht mehr zurück. Nur warum ??<br />
Sry aber ich verstehs nicht-vielleicht bin ich auch einfach zu müde *grins* -ich verbringe jetzt schon 4 Stunden (is kein Witz )damit den Source wieder und wieder anzusehen und ich finde einfach den Fehler nicht. <sup>_</sup></p>
<p>Wäre echt suuuuuuuuuuupernett wenn ihr mir da helfen könntet<br />
Schönen Gruß<br />
Christoph aka. Xzibit</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138695/dos-pipe-funktion-stürzt-bei-nicht-dosbefehl-und-dosbefehl-quot-dir-quot-ab</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 02:10:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138695.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Feb 2006 15:17:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dos-Pipe Funktion stürzt bei Nicht-Dosbefehl und Dosbefehl &amp;quot;dir&amp;quot; ab on Tue, 28 Feb 2006 15:17:24 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>ich hab in einem anderen Forum den Source für eine Dos-Pipe gefunden, der Quelltext sieht so aus ( bitte nicht erschrecken auch wenn er etwas lang aussieht <sup>_</sup>)</p>
<pre><code class="language-cpp">void ExecuteSE (char* szCommand, char *szDestination, int nSize, int nTimeOut)
{
	STARTUPINFO	si;
	PROCESS_INFORMATION	pi;
	SECURITY_ATTRIBUTES sa;
	HANDLE hPipeRead,hPipeWrite;
	DWORD dwBytes;

	//
	// Erstellen der Pipe
	sa.nLength=sizeof(sa);
	sa.bInheritHandle=TRUE;
	sa.lpSecurityDescriptor=NULL;
	CreatePipe(&amp;hPipeRead,&amp;hPipeWrite, &amp;sa, 0);
	//
	// Erstellen des Prozesses
	si.cb=sizeof(STARTUPINFO);
	si.lpReserved=NULL;
	si.lpDesktop=NULL;
	si.lpTitle=NULL;
	si.dwX=0;
	si.dwY=0;
	si.dwXSize=640;
	si.dwYSize=400;
	si.dwXCountChars=0;
	si.dwYCountChars=0;
	si.dwFillAttribute=FOREGROUND_BLUE;
	si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
	si.wShowWindow=SW_HIDE;
	si.cbReserved2=0;
	si.lpReserved2=NULL;
	si.hStdInput=0;
	si.hStdOutput=hPipeWrite;
	si.hStdError=0;
	CreateProcess(NULL, szCommand, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL, NULL, &amp;si, &amp;pi);
    CloseHandle (pi.hThread);
    WaitForSingleObject(pi.hProcess, nTimeOut);
	memset(szDestination, 0, nSize);
	ReadFile(hPipeRead,szDestination, nSize,&amp;dwBytes,NULL);
	return;
}
</code></pre>
<p>Ich hab den Code in eine Funktion gepackt, es funktioniert auch alles einwandfrei, also ich kann im char*szCommand-Argument einen Dosbefehl angeben und bekomme dann die Ausgabe in den String, den ich dem char*szDestination-Argument übergebeben habe. Nur...=) leider bleibt die Funktion hängen wenn es sich nicht um einen Dos-Befehl handelt.Und wenn ich den &quot;dir&quot; Befehl von Dos verwende, so kehrt die Funktion auch nicht mehr zurück. Nur warum ??<br />
Sry aber ich verstehs nicht-vielleicht bin ich auch einfach zu müde *grins* -ich verbringe jetzt schon 4 Stunden (is kein Witz )damit den Source wieder und wieder anzusehen und ich finde einfach den Fehler nicht. <sup>_</sup></p>
<p>Wäre echt suuuuuuuuuuupernett wenn ihr mir da helfen könntet<br />
Schönen Gruß<br />
Christoph aka. Xzibit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1005139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1005139</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 28 Feb 2006 15:17:24 GMT</pubDate></item></channel></rss>