Hi,
ich hab hier ein klitzekleines Problem... das mich jetzt schon über 3 Tage beschäftigt
Ich muss auf ein paar Rechnern per Delphi Programm bestimmte Rechte für einen Key in der Registry setzen,
genau genommen unter HKEY_LOCAL_MACHINE\Software\Firma\Produkt\Services . Die Schlüssel sind schon vorhanden, d.h. die kann ich nicht irgendwo anders hinschieben.
Und zwar braucht _jeder_ User auf dem Rechner Lese/Schreib-Rechte auf alle Values in diesem Schlüssel.
Jetzt hab ich google, delphi.* newsgroups etc. durchsucht aber was wirklich brauchbares kommt nicht dabei raus.
Jedoch eine kleine Komponente hab ich gefunden - die auch genau das machen würde was ich brauch - die aber leider irgendwas in der Registry verballert...
Hier die Sache bezüglich dieser Komponente:
http://www.elists.org/pipermail/delp...ay/023728.html
Delphi-Quellcode:
procedure AddRegistrySecurity (key : HKEY;
const userName :
string);
var
f : TNTRegistryObject;
acl : TAccessControlList;
begin
acl :=
Nil;
f := TNTRegistryObject.Create(hndkey);
try
acl := TAccessControlList.Create;
f.GetDiscretionaryAccessList(
acl);
acl.AddElement(TAccessControlElement.Create(userName, aeAccessAllowed, OBJECT_INHERIT_ACE
or CONTAINER_INHERIT_ACE, FILE_ALL_ACCESS));
f.SetDiscretionaryAccessList(
acl);
except
ShowMessage('
error2');
end;
acl.Free;
f.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if RegOpenKey(HKEY_LOCAL_MACHINE, '
SOFTWARE\Firma\Produkt\Services', hndKey) = ERROR_SUCCESS
then
begin
AddRegistrySecurity(hndKey, '
Jeder');
RegCloseKey(hndkey);
end
else
begin
showMessage('
not found');
end;
end;
Für ich das ganze aus gibts keinerlei Fehlermeldungen/Exceptions. Gehe ich allerdings mit regedit zu diesem Schlüssel und schau mir die Zugriffsrechte an, sagt regedit die Zugriffsrechte wären nicht in der richtigen Reihenfolge. Erst wenn regedit die dann wieder sortiert hat stehen die Zugriffsrechte richtig drin und erst DANN kann das Programm, welches auf diese Schlüssel schreibend zugreifen muss auch wirklich zugreifen (für die, die wie ich auf den Gedanken gekommen sind: egal was regedit anzeigt/sagt, vielleicht tuts ja trotzdem)
Dazu muss man noch sagen, dass diese Komponente eine Datei Namens Lmglobal.pas bzw
dcu braucht.. die hatte ich hier aber nicht.
Bei google gibts dazu genau 3 Hits von irgend einer französischen Seite von der ich mir diese Datei dann gezogen hab... vielleicht liegt ja da auch irgendwo das Problem.
Ich benutze übrigens Delphi 2006, getestet hab das alles bisher nur unter WinXP mit SP2 in einer VMware, allerdings soll das von Windows 2000 bis Vista laufen - Würgarounds speziell für XP oder so bringen mir da nix.
Bitt Bitte Bitte mit Zucker obendrauf - hat irgendwer dafür ne Lösung?