<?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[Problem beim Zugriff auf die Registry in einer ServiceAnwendung]]></title><description><![CDATA[<p>Hi</p>
<p>Ich programmiere z.Z. einen Service mit TurboC++ (BDS 4.0) und versuche in diesem auf die Registry zuzugreifen. Das sieht wie folgt aus:</p>
<pre><code class="language-cpp">HKEY hKey;
 byte *out=NULL;
 unsigned long size=1;
 int err=RegOpenKeyEx(HKEY_CURRENT_USER,
			          &quot;Software\\Microsoft\\MSNMessenger&quot;,
			          0,KEY_ALL_ACCESS,&amp;hKey);
 if(hKey==NULL) ShowMessage(&quot;err:&quot;+IntToStr(err));
 ShowMessage(&quot;GetLastError:&quot;+IntToStr(GetLastError()));
 do
 { delete out; out=new byte[size]; }
 while(RegQueryValueEx(hKey,&quot;AppCompatCanary&quot;,NULL,NULL,out,&amp;size)==ERROR_MORE_DATA);

 RegCloseKey(hKey);
</code></pre>
<p>Das Problem ist, dass hKey immer NULL ist. Also habe ich die zwei Messages eingebaut um mir anzugucken woran das liegen könnte.<br />
Die erste sagt folgendes: 2: ERROR_FILE_NOT_FOUND<br />
Das komische ist nur, dass der genau selbe Quelltext (copy&amp;paste) in einer VCL-Anwendung einen gültigen Key und Error_Succes zurückgibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Der Key existiert auch definitiv.</p>
<p>Die zweite MessageBox sagt dann folgendes: 299: ERROR_PARTIAL_COPY<br />
Darauf kann ich mir keinen Reim machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hat einer eine Idee warum es in einer VCL-Anwendung geht aber in einem Dienst nicht?<br />
Bin für jede Hilfe dankbar.</p>
<p>Gruß<br />
rean</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161023/problem-beim-zugriff-auf-die-registry-in-einer-serviceanwendung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 08:39:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161023.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Oct 2006 13:41:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Mon, 02 Oct 2006 13:41:45 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich programmiere z.Z. einen Service mit TurboC++ (BDS 4.0) und versuche in diesem auf die Registry zuzugreifen. Das sieht wie folgt aus:</p>
<pre><code class="language-cpp">HKEY hKey;
 byte *out=NULL;
 unsigned long size=1;
 int err=RegOpenKeyEx(HKEY_CURRENT_USER,
			          &quot;Software\\Microsoft\\MSNMessenger&quot;,
			          0,KEY_ALL_ACCESS,&amp;hKey);
 if(hKey==NULL) ShowMessage(&quot;err:&quot;+IntToStr(err));
 ShowMessage(&quot;GetLastError:&quot;+IntToStr(GetLastError()));
 do
 { delete out; out=new byte[size]; }
 while(RegQueryValueEx(hKey,&quot;AppCompatCanary&quot;,NULL,NULL,out,&amp;size)==ERROR_MORE_DATA);

 RegCloseKey(hKey);
</code></pre>
<p>Das Problem ist, dass hKey immer NULL ist. Also habe ich die zwei Messages eingebaut um mir anzugucken woran das liegen könnte.<br />
Die erste sagt folgendes: 2: ERROR_FILE_NOT_FOUND<br />
Das komische ist nur, dass der genau selbe Quelltext (copy&amp;paste) in einer VCL-Anwendung einen gültigen Key und Error_Succes zurückgibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Der Key existiert auch definitiv.</p>
<p>Die zweite MessageBox sagt dann folgendes: 299: ERROR_PARTIAL_COPY<br />
Darauf kann ich mir keinen Reim machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hat einer eine Idee warum es in einer VCL-Anwendung geht aber in einem Dienst nicht?<br />
Bin für jede Hilfe dankbar.</p>
<p>Gruß<br />
rean</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148020</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Mon, 02 Oct 2006 13:41:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Mon, 02 Oct 2006 13:52:20 GMT]]></title><description><![CDATA[<p>Der C++Builder hat extra eine Klasse für die Registry (TRegistry). Die Frage wäre im WIN API Forum besser</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148027</guid><dc:creator><![CDATA[Christian411]]></dc:creator><pubDate>Mon, 02 Oct 2006 13:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Mon, 02 Oct 2006 13:58:33 GMT]]></title><description><![CDATA[<p>Ich weis aber ich finde die WinApi-Funktionen schlanker und die Möglichkeiten zur Fehlerauswertung besser.<br />
Außerdem kriege ich bei der Verwendung von TRegistry nur ein einfaches false von OpenKey zurück.<br />
Und es gehört deswegen nicht ins WinApi-Forum weil es sich offensichtlich um ein Problem von TServiceApplication handelt da es bei einer normalen VCL-Anwendung ja einwandfrei funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148031</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Mon, 02 Oct 2006 13:58:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Mon, 02 Oct 2006 14:01:40 GMT]]></title><description><![CDATA[<p>nach meiner Erfahrung mit einigen Diensten geht das auch mit TRegistry in einem TService nur begrenzt,<br />
man kann nur auf Schlüssel des Dienstes zugreifen und die liegen alle unter HKEY_LOCAL_MACHINE, alle Versuche auf HKEY_CURRENT_USER zuzugreifen schlugen bisher fehl</p>
<p>deshalb ist das Thema hier nicht ganz falsch<br />
und eine Lösung würde mich auch interessieren <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/1148033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148033</guid><dc:creator><![CDATA[Linnea]]></dc:creator><pubDate>Mon, 02 Oct 2006 14:01:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Mon, 02 Oct 2006 14:23:32 GMT]]></title><description><![CDATA[<p>Ok noch ein paar Infos:<br />
Die Routine liegt in einem OnTimer-Event.<br />
Der Timer ist standardmässig deaktiviert und wird im ServiceStart-Event meines Services aktiviert damit sein Event nicht schon bei der Installation sondern erst beim Starten des Dienstes ausgeführt wird.<br />
Wenn ich den Timer jetzt standardmässig aktiviere kriege ich Error_Succes für RegOpenKeyEx <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Das wirklich seltsame ist, dass der Timer auch schon vorher korrekt aktiviert wurde. Ich hab ja auch schon vorher die Messages gesehen...<br />
Jetzt kriege ich wie gesagt Error_Succes bei RegOpenKeyEx dafür aber ERROR_FILE_NOT_FOUND bei RegQueryValueEx *sigh*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148038</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Mon, 02 Oct 2006 14:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Wed, 04 Oct 2006 00:43:57 GMT]]></title><description><![CDATA[<p>Wie heißt es doch so schön?<br />
Manchmal sieht man den Wald vor lauter Bäumen nicht.</p>
<p>Unter dem Rootkey 'Current_User' sind, wie der Name schon sagt, die Schlüssel für den momentan angemeldeten Benutzer gespeichert, bzw. sind die Schlüssel dort nur so etwas wie Links zum eigentlichen Speicherort unter 'Users'.<br />
Dienste werden aber nicht vom aktuellen Benutzer gestartet sondern unter dem Konto 'System', wie man auch im Taskmanager sehen kann.<br />
Das heißt, dass das Current_User Verzeichnis auf das der Dienst zugreifen kann praktisch das vom Konto 'System' ist. Das auf das man über Regedit zugreift aber das vom aktuell angemeldeten Benutzer.</p>
<p>Ich hoffe ich drücke mich einigermassen verständlich aus <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="😃"
    /><br />
Die Quintessenz ist: Current_User sieht für einen Dienst anders aus als für den angemeldeten Benutzer.</p>
<p>Zu den einzelnen Verhältnissen siehe hier: <a href="http://support.microsoft.com/kb/q163846/" rel="nofollow">http://support.microsoft.com/kb/q163846/</a><br />
Lösung des Problems ist es einfach auf die entsprechenden Schlüssel unter HKEY_USERS\S-1-5-21-xxx zuzugreifen.<br />
Diese scheinen ohnehin die &quot;Originale&quot; zu sein. Die Schlüssel unter Current_User sind wie schon erwähnt offensichtlich nur so etwas wie Links zu dieser Position.</p>
<p>Es ist allerdings ein gewisses Problem herauszufinden welcher der Schlüssel unter HKEY_USERS der passende zum angemeldeten User ist. GetUserName liefert in einem Dienst immer 'System' zurück und selbst wenn man den Benutzernamen kennt weis ich nicht wie man davon auf den entsprechenden Schlüssel in Users schließt.<br />
Alle Schlüssel unter Users sind an dieser Position gespeichert: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList<br />
Allerdings ohne Indizien dafür zu enthalten welcher der Schlüssel zu welchem Benutzer gehört. Das einzige wäre der Wert: ProfileImagePath der das hier enthält: %SystemDrive%\Dokumente und Einstellungen\Test<br />
Allerdings bin ich mir nicht sicher ob in diesem Wert immer der Benutzername am Schluss vorkommen muss.<br />
Außerdem bleibt dann immernoch das Problem herauszufinden welcher Benutzer aktuell angemeldet ist.</p>
<p>Ich hoffe das was ich hier geschrieben habe ist verständlich. Außerdem entschuldige ich mich für den Doppelpost aber der Thread ist schon so abgerutscht, dass wohl niemand diese Antwort in einem Edit gelesen hätte.</p>
<p>Vielleicht fällt ja noch jemandem ein wie man den angemeldeten Benutzer in einem Dienst bestimmt. Die ganzen StandardWinapis hab ich schon durchprobiert (GetUserName etc.).<br />
Jedenfalls geh ich jetzt schlafen.<br />
hf &amp; cu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148956</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Wed, 04 Oct 2006 00:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Zugriff auf die Registry in einer ServiceAnwendung on Wed, 04 Oct 2006 06:47:51 GMT]]></title><description><![CDATA[<p>rean schrieb:</p>
<blockquote>
<p>Vielleicht fällt ja noch jemandem ein wie man den angemeldeten Benutzer in einem Dienst bestimmt.</p>
</blockquote>
<p>wenn der Dienst beim Rechnerneustart automatisch gestartet wird, muß niemand angemeldet sein, insofern nützt es nichts einen Benutzer zu suchen</p>
<p>günstiger wär wahrscheinlich alle Schlüssel aus ProfileList zu nehmen und dann in HKEY_USERS diese Schlüssel nach dem gesuchten Wert abzusuchen, wobei man alle die Schlüssel ignorieren kann, die keine ProfileImagePath gesetzt haben</p>
<p>ausserdem scheint es so zu sein, dass nicht für alle User Schlüssel in HKEY_USERS vorhanden sind</p>
<p>rean schrieb:</p>
<blockquote>
<p>Das einzige wäre der Wert: ProfileImagePath der das hier enthält: %SystemDrive%\Dokumente und Einstellungen\Test<br />
Allerdings bin ich mir nicht sicher ob in diesem Wert immer der Benutzername am Schluss vorkommen muss.</p>
</blockquote>
<p>bei meinem Rechner ist immer dann der Benutzername am Ende angegeben, wenn der Wert für ProfileImagePath gesetzt ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148991</guid><dc:creator><![CDATA[Linnea]]></dc:creator><pubDate>Wed, 04 Oct 2006 06:47:51 GMT</pubDate></item></channel></rss>