<?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[CreateProcess u. TerminateProcess]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich starte mit <em>CreateProcess</em> das Programm Mozilla Firefox mit dem Parameter <em>-new-window</em> und öffne auf diese Weise eine Webseite. Das klappt auch perfekt!<br />
Nachdem die Seite einmal aufgerufen wurde, benötige ich sie jedoch nicht mehr und möchte sie wieder schließen. Dies habe ich versucht mit <em>TerminateProcess</em> zu erledigen. <em>TerminateProcess</em> gibt aber leider <strong>false</strong> zurück und <em>GetLastError</em> gibt den Fehlercode 5 (Access denied oder so ähnlich) zurück.</p>
<p>Mir scheint also die Berechtigung zum Schließen zu fehlen. Leider habe ich keine Idee warum dies so ist und ich hoffe nun auf eure Hilfe dieses Problem zu beheben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">STARTUPINFO si;
		PROCESS_INFORMATION pi;

		ZeroMemory(&amp;si, sizeof(si)); // Ist das überhaupt notwendig?
		ZeroMemory(&amp;pi, sizeof(pi)); // Ist das überhaupt notwendig?
		si.cb = sizeof(si);
		si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
		si.wShowWindow = SW_SHOWNORMAL;

		CreateProcess(NULL, (LPSTR) cmd, NULL, NULL, NORMAL_PRIORITY_CLASS, 0, NULL, NULL, &amp;si, &amp;pi);
		WaitForSingleObject(pi.hProcess, 1000);

		if (!TerminateProcess(pi.hProcess, 0)) {
			std::cerr &lt;&lt; &quot;Fehler&quot; &lt;&lt; std::endl;
		}
</code></pre>
<p>Viele Grüße,<br />
Jack Bauer</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212115/createprocess-u-terminateprocess</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 20:35:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212115.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 May 2008 19:07:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Thu, 01 May 2008 19:07:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich starte mit <em>CreateProcess</em> das Programm Mozilla Firefox mit dem Parameter <em>-new-window</em> und öffne auf diese Weise eine Webseite. Das klappt auch perfekt!<br />
Nachdem die Seite einmal aufgerufen wurde, benötige ich sie jedoch nicht mehr und möchte sie wieder schließen. Dies habe ich versucht mit <em>TerminateProcess</em> zu erledigen. <em>TerminateProcess</em> gibt aber leider <strong>false</strong> zurück und <em>GetLastError</em> gibt den Fehlercode 5 (Access denied oder so ähnlich) zurück.</p>
<p>Mir scheint also die Berechtigung zum Schließen zu fehlen. Leider habe ich keine Idee warum dies so ist und ich hoffe nun auf eure Hilfe dieses Problem zu beheben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">STARTUPINFO si;
		PROCESS_INFORMATION pi;

		ZeroMemory(&amp;si, sizeof(si)); // Ist das überhaupt notwendig?
		ZeroMemory(&amp;pi, sizeof(pi)); // Ist das überhaupt notwendig?
		si.cb = sizeof(si);
		si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
		si.wShowWindow = SW_SHOWNORMAL;

		CreateProcess(NULL, (LPSTR) cmd, NULL, NULL, NORMAL_PRIORITY_CLASS, 0, NULL, NULL, &amp;si, &amp;pi);
		WaitForSingleObject(pi.hProcess, 1000);

		if (!TerminateProcess(pi.hProcess, 0)) {
			std::cerr &lt;&lt; &quot;Fehler&quot; &lt;&lt; std::endl;
		}
</code></pre>
<p>Viele Grüße,<br />
Jack Bauer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1501749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1501749</guid><dc:creator><![CDATA[Jack Bauer]]></dc:creator><pubDate>Thu, 01 May 2008 19:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Fri, 02 May 2008 20:04:14 GMT]]></title><description><![CDATA[<p>TerminateProcess ist prinzipiell eine schlechte Idee, weil der Prozeß hart gekillt wird, und sich nicht normal beenden kann.</p>
<p>Die einfachste Variante die ich mir vorstellen kann, ist PostThreadMessage(thread(!) ID, WM_QUIT).</p>
<p>Alternativ könntest Du auch z.B. mit EnumWindows die top-level-fenster enumerieren und mit GetWindowThreadProcessId prüfen, ob es &quot;Dein&quot; Prozeß ist. Wenn ja, WM_CLOSE an das Fenster schicken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502306</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Fri, 02 May 2008 20:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Sun, 04 May 2008 18:08:05 GMT]]></title><description><![CDATA[<p>Jack Bauer schrieb:</p>
<blockquote>
<p>Mir scheint also die Berechtigung zum Schließen zu fehlen. Leider habe ich keine Idee warum dies so ist und ich hoffe nun auf eure Hilfe dieses Problem zu beheben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Hilfe lesen bildet:</p>
<blockquote>
<p>The handle must have the PROCESS_TERMINATE access right.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1503257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503257</guid><dc:creator><![CDATA[_Luckie]]></dc:creator><pubDate>Sun, 04 May 2008 18:08:05 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Mon, 05 May 2008 07:06:00 GMT]]></title><description><![CDATA[<p><a href="http://blog.m-ri.de/index.php/2007/12/09/die-unsitte-postquitmessage-zum-beenden-eines-programmes-zu-verwenden/" rel="nofollow">http://blog.m-ri.de/index.php/2007/12/09/die-unsitte-postquitmessage-zum-beenden-eines-programmes-zu-verwenden/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503423</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 05 May 2008 07:06:00 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Mon, 05 May 2008 07:24:55 GMT]]></title><description><![CDATA[<p>Hallo Martin,</p>
<p>dann mach doch mal einen Vorschlag, wie man *externe* Programme korrekt beenden soll!?<br />
Meines Wissens nach ist dies die korrekte und einzig Sinnvolle Möglichkeit...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503431</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 05 May 2008 07:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Mon, 05 May 2008 08:35:49 GMT]]></title><description><![CDATA[<p>Wer hat geschrieben, dass das Senden von WM_QUIT der einzige Weg ist?<br />
Würde mich wirklich interessieren.</p>
<p>Das Hauptproblem ist, dass ein Programm eben terminiert mit dieser Methode und alle Fenster ofen bleiben. Sicher werden die abgeräumt.<br />
Anschließend wird im Mainthread ExitProcess aufgerufen. Du weißt selbst, was dies für offene Threads und evtl. Mutexe etc. bedeutet...</p>
<p>Man kann kein UI Programm allgemeingültig Beenden, zumindest wurde dies in der Windows API nicht vorgesehen...<br />
Diesen Mißstand haben die MS Programmierer ja auch erst mit einer Erweiterung von WM_QUERYENDSESSION in Vista behoben, da ging es ja auch schon nicht!</p>
<p>Man kann sicherlich WM_CLOSE senden an ein Fenster, was aber im Gegenzug wieder zu einer modalen Messagebox führten kann wegen der Frage &quot;Speichern J/N&quot;.<br />
Ich versuche WM_CLOSE zu posten. Ist das Programm nach einer Grace Zeit nicht weg, kann man dies noch mehrfach versuchen. Also immer wieder WM_CLOSE senden.<br />
Das Problem sind MessageBox'en mit J/N/Abbrechen Fragen. Diese interpretieren WM_CLOSE IMHO als &quot;Abbrechen&quot;.</p>
<p>Da man die Frage icht kennt die eine Programm stellt, wenn die Daten nicht gespeichert sind, kann man also auch hier wieder nicht allgemeingültig reagieren und den Vorgang abbrechen.</p>
<p>Nach meiner Auffassung gibt es keine allgemeine Regel, sondern nur spezielle Lösungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503470</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 05 May 2008 08:35:49 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Mon, 05 May 2008 08:46:03 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wer hat geschrieben, dass das Senden von WM_QUIT der einzige Weg ist?<br />
Würde mich wirklich interessieren.</p>
</blockquote>
<p>Zwar nicht der einzige, aber anscheindend der Empfohlene:</p>
<p>How To Terminate an Application &quot;Cleanly&quot; in Win32<br />
<a href="http://support.microsoft.com/kb/178893/en-us" rel="nofollow">http://support.microsoft.com/kb/178893/en-us</a></p>
<p>Terminating Windows-Based Application from Another App<br />
<a href="http://support.microsoft.com/kb/92528/en-us" rel="nofollow">http://support.microsoft.com/kb/92528/en-us</a></p>
<p>How To Close Applications from Visual Basic (hier sogar mit WM_QUIT anstelle von WM_CLOSE)<br />
<a href="http://support.microsoft.com/kb/153463/en-us" rel="nofollow">http://support.microsoft.com/kb/153463/en-us</a></p>
<p>Es ist ja noch viel schlimmer: Hier wird dies auch für den lokalen Prozess angepriesen:<br />
How to Programatically Terminate an MFC Application<br />
<a href="http://support.microsoft.com/kb/117320/en-us" rel="nofollow">http://support.microsoft.com/kb/117320/en-us</a></p>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Nach meiner Auffassung gibt es keine allgemeine Regel, sondern nur spezielle Lösungen.</p>
</blockquote>
<p>Na, dann sind wir uns ja einig... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503475</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 05 May 2008 08:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to CreateProcess u. TerminateProcess on Tue, 06 May 2008 07:07:21 GMT]]></title><description><![CDATA[<blockquote>
<p>Wer hat geschrieben, dass das Senden von WM_QUIT der einzige Weg ist?</p>
</blockquote>
<p>Ich war's nicht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503969</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 06 May 2008 07:07:21 GMT</pubDate></item></channel></rss>