Announcement

Collapse
No announcement yet.

Ärger mit Zugriff auf die Registry

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ärger mit Zugriff auf die Registry

    Habe ein Programm entwickelt, dass - da es allen Benutzern zur Verfügung stehen soll - über die Registry HKEY_LOCAL_MACHINE/..../run gestartet wird.

    Daten die das Programm benötigt werden in die Registry (HKEY_LOCAL_MACHINE) gespeichert und von dort gelesen (im OnCreate).

    Wird der erste Benutzer angemeldet ist das Programm gestartet und hat seine Daten aus der Registry gelesen.

    Wechsle ich nun zu einem anderen Benutzer, ist dann da zwar auch das Programm vorhanden, aber es hat keine Daten aus der Registry gelesen.

    ????????????

    Nun bin ich platt. Hat jemand Ahnung warum bein 2. User keine Daten gelesen werden?
    Christian

  • #2
    Mittlerweile habe ich herausbekommen, dass nicht nur HKEY_CURRENT_USER sondern auch HKEY_LOCAL_MACHINE Benutzer bezogen ist. Wenn man Schlüssel ablegen will, die für alle gelten, so sind diese unter HKEY_USERS\.DEFAULT\ abzulegen. Da werden die dann nach HKEY_CURRENT_USER kopiert und stehen dort zur Verfügung.

    Nun habe ich das getan, doch nix wird kopiert oder steht unter HKEY_CURRENT_USER zur Verfügung.

    ????
    Christian

    Comment


    • #3
      DEFAULT wird meines Wissens nur beim Anlegen eines Users benutzt. Leg mal einen neuen User an, der sollte dann diese Einstellungen haben.

      Aber Du kannst den Schlüssel doch unter HKEY_LOCAL_MACHINE ablegen. Nachteil: Bei der Installation braucht man Admin-Rechte.

      User-bezogene Daten unter dem Userprofil, wenn dort nichts gefunden wurde müssen Default-Werte aus aus HKEY_LOCAL_MACHINE oder DEFAULT übernommen werden. Das ist dann der Fall, wenn der User erstmals Dein Programm aufruft
      Günther

      Comment


      • #4
        Mit HKEY_LOCAL_MACHINE geht es leider auch nicht.

        Wo ist das Userprofil in der Registry??

        Unter HKEY_USER sind nur Einträge wie S-1-15-8. Zwar erkenne ich mein PRofil darin, aber das kann ich ja nicht hard-codieren.

        Kann nicht verstehen, dass das so schwer ist -> Ein Schlüssel anlegen, auf den jeder User zugreifen kann
        Christian

        Comment


        • #5
          Nun habe ich es rausbekommen, wie das geht.

          Das folgende Beispiel zeigt wie man ein Registry Schlüssel für alle User zugänglich macht. Da das TRegistryobjekt leider kein Handle auf den RegistryKey zurückgibt, müssen wir leider die WIN 32 API Funktionen bemühen:

          <pre>
          HKEY key=NULL;
          long test=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\XP UserScreen",0,KEY_ALL_ACCESS,&key);
          if(test==ERROR_SUCCESS)
          {
          SECURITY_ATTRIBUTES sec_attr;
          SECURITY_DESCRIPTOR sec_des;
          memset(&sec_attr,0,sizeof(SECURITY_ATTRIBUTES));
          InitializeSecurityDescriptor( &sec_des,SECURITY_DESCRIPTOR_REVISION);
          SetSecurityDescriptorDacl(&sec_des,true,(PACL)NULL ,false);
          sec_attr.nLength=sizeof(SECURITY_ATTRIBUTES);
          sec_attr.lpSecurityDescriptor=&sec_des;
          sec_attr.bInheritHandle=TRUE;
          RegSetKeySecurity(key,(SECURITY_INFORMATION)DACL_S ECURITY_INFORMATION,&sec_des);
          RegCloseKey(key);
          }

          </pre&gt
          Christian

          Comment

          Working...
          X