<?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[TRegistry: Probleme mit DeleteKey]]></title><description><![CDATA[<p>Hallo nochmals:</p>
<p>Ich möchte einen erzeugten Registry-Key wieder weglöschen lassen. Folgender Code führt dazu, dass der angegebene Registry-Key nicht gelöscht wird und demzufolge bOK = false ist (ich bin auf meinem Rechner als Admin eingeloggt und der Schlüssel existiert auch so wie er da steht):</p>
<pre><code class="language-cpp">TRegistry *pReg = new TRegistry;
bool bOk;
try
{
   pReg-&gt;RootKey = HKEY_LOCAL_MACHINE;
   bOk = pReg-&gt;DeleteKey(&quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\DisplayServer&quot;);
}
catch (...)
{
      bOk = false;
}

if (pReg) delete pReg;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/81056/tregistry-probleme-mit-deletekey</link><generator>RSS for Node</generator><lastBuildDate>Tue, 30 Jun 2026 17:28:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/81056.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Jul 2004 14:31:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Tue, 27 Jul 2004 14:32:04 GMT]]></title><description><![CDATA[<p>Hallo nochmals:</p>
<p>Ich möchte einen erzeugten Registry-Key wieder weglöschen lassen. Folgender Code führt dazu, dass der angegebene Registry-Key nicht gelöscht wird und demzufolge bOK = false ist (ich bin auf meinem Rechner als Admin eingeloggt und der Schlüssel existiert auch so wie er da steht):</p>
<pre><code class="language-cpp">TRegistry *pReg = new TRegistry;
bool bOk;
try
{
   pReg-&gt;RootKey = HKEY_LOCAL_MACHINE;
   bOk = pReg-&gt;DeleteKey(&quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\DisplayServer&quot;);
}
catch (...)
{
      bOk = false;
}

if (pReg) delete pReg;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/569569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/569569</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Tue, 27 Jul 2004 14:32:04 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Tue, 27 Jul 2004 14:49:30 GMT]]></title><description><![CDATA[<p>F98 schrieb:</p>
<blockquote>
<p>der Schlüssel existiert auch so wie er da steht</p>
</blockquote>
<p>Ganz sicher? kannst du ihn denn z.B. problemlos öffnen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/569598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/569598</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Tue, 27 Jul 2004 14:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Tue, 27 Jul 2004 14:52:03 GMT]]></title><description><![CDATA[<p>Und in einem eigenen Beitrag, damit die Diskussion ggf. abgetrennt werden kann: Was soll eigentlich das <em>if (pReg) delete pReg;</em>? Das ist mir jetzt schon in etlichen Beiträgen verschiedener Leute aufgefallen.<br />
Dabei ist es a) sinnlos, da AFAIK ein fehlgeschlagenes <em>new</em> ohnehin eine <em>bad_alloc</em>-Exception wirft und b) potentiell gefährlich, wenn man im Verlauf den Programms den Pointer (versehentlich) auf NULL gesetzt hat. Denn das macht ja das <em>delete</em> nicht überflüssig ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/569602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/569602</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Tue, 27 Jul 2004 14:52:03 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Tue, 27 Jul 2004 17:55:20 GMT]]></title><description><![CDATA[<p>zuerstmal (gaaanz böse): wer &quot;versehentlich&quot; einen Pointer auf NULL setzt, sollte vielleicht noch mal überdenken, ob Programmieren das Richtige für ihn ist. <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>
<p>Ansonsten habe ich mir angewöhnt, so gut wie den gesamten Code in try / __finally und innerhalb dessen in try catch zu setzen (frei nach Murphys Gesetz...):</p>
<pre><code class="language-cpp">bool result = true; // Rückgabewert vorbelegen (damit man nur im Fehlerfall das result auf false setzen muß)
TIrgendwas* MeinZeiger = NULL; // definierte Ausgangssituation schaffen
try
{
  try
  {
     MeinZeiger = new TIrgendwas();
     // und was sonst noch mit MeinZeiger zu geschehen hat. Notfalls in noch mehr try catch geschachtelt
  }
  catch(EIrgendwasError &amp;Err) // erwartete Fehler abfangen und behandeln
  {
     // Fehlerbehandlung und Schadensbegrenzung
     result = false;
  }
  catch (...) // unerwartete Fehler abfangen
  {
     result = false;
     // Hier kann man dann meist nicht mehr viel tun, außer Aufräumen...
  }
}
__finally
{
  if (MeinZeiger) // und dann macht es Sinn, so zu prüfen...
     delete MeinZeiger;
  return result;
}
</code></pre>
<p>Ach ja und ansonsten ist es sehr hilfreich, VOR der Verwendung eines Zeigers grundsätzlich zu prüfen, ob dieser NULL ist. Auch bevor man den Zeiger auf NULL setzt. Je nach Situation lösche ich in einem solchen Fall das bestehende Objekt, oder gebe eine entsprechende Fehlermeldung im Logfile aus, und bitte den Benutzer sich an mich zu wenden.</p>
<p>Die Verwendung von Zeigern in Arrays oder sich selbst organisierenden Objekten ist natürlich nicht ganz trivial aber es läßt sich damit immer noch äußerst schneller Code schreiben. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>So und jetzt muß ich mir wahrscheinlich von J. wieder anhören, dass das für RAD viel zu viel Aufwand ist... <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="😉"
    /> Aber da ich meist mit Datenbanken hantiere und es dort so viele potentielle und nicht zu kontrollierende Fehlerquellen gibt, hab' ich mir das im Laufe der Jahre so angewöhnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/569742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/569742</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 27 Jul 2004 17:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Tue, 27 Jul 2004 18:18:30 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>// und dann macht es Sinn, so zu prüfen...</p>
</blockquote>
<p>Aber auch nur dann, in genau diesem Kontext.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/569766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/569766</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Tue, 27 Jul 2004 18:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 06:50:20 GMT]]></title><description><![CDATA[<p>Auch auf die gefahr hin, dass der Thread abgleitet:</p>
<p>Joe_M. schrieb:</p>
<blockquote>
<pre><code class="language-cpp">bool result = true; // Rückgabewert vorbelegen (damit man nur im Fehlerfall das result auf false setzen muß)
TIrgendwas* MeinZeiger = NULL; // definierte Ausgangssituation schaffen
try
{
  try
  {
     MeinZeiger = new TIrgendwas();
     // und was sonst noch mit MeinZeiger zu geschehen hat. Notfalls in noch mehr try catch geschachtelt
  }
  catch (Exception &amp;E) // erwartete Fehler abfangen und behandeln
  {
     // Fehlerbehandlung und Schadensbegrenzung
     ShowMessage(E.Message);
     result = false;
  }
}
__finally
{
  if (MeinZeiger) // und dann macht es Sinn, so zu prüfen...
     delete MeinZeiger;
  return result;
}
</code></pre>
</blockquote>
<p>Das 2. catch erübrigt sich dann meiner Meinung nach.</p>
<p>So, wieder zum Thema: Screenshot von regedit unter <a href="http://fatman98.funpic.de/Data/" rel="nofollow">Key</a>. Also entweder habe ich Fett auf der Brille, oder ich bin bescheuert ... Jedenfalls gehts mit Hand (im regedit) rauszulöschen, aber nicht mit dem obigen Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/570034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570034</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Wed, 28 Jul 2004 06:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 07:13:23 GMT]]></title><description><![CDATA[<p>F98 schrieb:</p>
<blockquote>
<p>Das 2. catch erübrigt sich dann meiner Meinung nach.</p>
</blockquote>
<p>In diesem simplen Beispiel bestimmt. Aber dieses Beispiel sollte als 'Schablone' für Funktionrümpfe verstanden werden, in den Fehler auftreten können, auf die man als Programmierer keinen Einfluß hat. Und es macht durchaus Sinn auf bestimmte Fehler anders zu reagieren. Die Alternative, das in if's auszuwerten gefällt mir nicht. Mit mehreren catch-Blöcken finde ich es lesbarer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/570052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570052</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 28 Jul 2004 07:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 07:24:59 GMT]]></title><description><![CDATA[<p>F98 schrieb:</p>
<blockquote>
<p>...Jedenfalls gehts mit Hand (im regedit) rauszulöschen, aber nicht mit dem obigen Code.</p>
</blockquote>
<p>Hast Du es mal ohne die das führende Backslash im String versucht (&quot;SYSTEM\...&quot;)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/570068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570068</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 28 Jul 2004 07:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 07:46:20 GMT]]></title><description><![CDATA[<p>Joe_M. schrieb:</p>
<blockquote>
<p>Hast Du es mal ohne die das führende Backslash im String versucht (&quot;SYSTEM\...&quot;)?</p>
</blockquote>
<p>Ja. Erzeugen klappt ja auch ohne Probleme:</p>
<pre><code class="language-cpp">TRegistry *pReg = new TRegistry;
bool bOk = true;
try
{
   pReg-&gt;RootKey = HKEY_LOCAL_MACHINE;
   if (pReg-&gt;OpenKey(&quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run&quot;, true))
   {
      pReg-&gt;WriteString(&quot;DisplayServer&quot;, ParamStr(0));
      pReg-&gt;CloseKey();
   }
}
catch (...)
{
      bOk = false;
}

if (pReg) delete pReg; //  :)
</code></pre>
<p>Jedoch funktioniert ebenfalls nicht, trotzdem der Schlüssel existiert:</p>
<pre><code class="language-cpp">TRegistry *pReg = new TRegistry;
bool bOk = true;
try
{
   pReg-&gt;RootKey = HKEY_LOCAL_MACHINE;
   if (pReg-&gt;OpenKey(&quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\DisplayServer&quot;, false)) // OpenKey ist in dem Falle == false :(
   {
      bOk = pReg-&gt;DeleteKey(&quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\DisplayServer&quot;);
   }
}
catch (...)
{
      bOk = false;
}

if (pReg) delete pReg; //  :)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/570085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570085</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Wed, 28 Jul 2004 07:46:20 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 08:29:12 GMT]]></title><description><![CDATA[<p>Vielleicht weil &quot;DisplayServer&quot; kein Key sondern eine Value ist?</p>
<p>-junix</p>
<p>EDIT: Zur Erinnerung: Keys = Ordner in Regedit, Values = &quot;Datei-iconmässig&quot; in Regedit...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/570127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570127</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 28 Jul 2004 08:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 08:46:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Sag mal, ist bei dir &quot;DisplayServer&quot; nicht ein Datenwert innerhalb des Schlüssels &quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run&quot; ? Den müsstest du doch eigentlich mit DeleteValue löschen und nicht mit DeleteKey.</p>
<p>Ciao</p>
<p>[/EDIT] Das war wohl zu spät. Man sollte wohl neben dem Editieren nichts anderes machen <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="😉"
    /> [EDIT]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/570137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570137</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 28 Jul 2004 08:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to TRegistry: Probleme mit DeleteKey on Wed, 28 Jul 2004 08:48:48 GMT]]></title><description><![CDATA[<p>Gott bin ich doof! Da war der Hund begraben (die Hitze ...)</p>
<p>Richtig muss es sein:</p>
<pre><code class="language-cpp">TRegistry *pReg = new TRegistry;
bool bOk = true;
try
{
   pReg-&gt;RootKey = HKEY_LOCAL_MACHINE;
   if (pReg-&gt;OpenKey(&quot;\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run&quot;, false))
   {
      bOk = pReg-&gt;DeleteValue(&quot;DisplayServer&quot;); X)
   }
}
catch (...)
{
      bOk = false;
}

if (pReg) delete pReg;
</code></pre>
<p>Manchmal bin ich irgendwie betriebsblind ... <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/570142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/570142</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Wed, 28 Jul 2004 08:48:48 GMT</pubDate></item></channel></rss>