Autor |
Beitrag |
LonghornUser
      
Beiträge: 796
|
Verfasst: Mi 21.10.09 20:35
Hallo,
ich habe ein Problem mit der Benutzerkontensteuerung (UAC) unter Windows 7 (das wird sich aber bestimmt unter Vista genauso verhalten). Ich schreibe durch folgenden Code in die Registry:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| If IsAdmin = True then begin Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.OpenKey('Software\Test1\Test2',True);
Reg.WriteString('Test3','1'); end; |
Leider bekomme ich dann eine Fehlermeldung "Cannot write ...", welche nicht abgefangen wird, weil man ja trotzdem als Admin angemeldet ist, nur die UAC Schreibrechte entzieht.
Habt ihr eine Idee, wie ich dieses Problem beheben könnte?
Ciao LHUser
Moderiert von Narses: Quote- durch Delphi-Tags ersetzt
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mi 21.10.09 21:00
Vielleicht klappt folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var Reg: TRegistry; begin try Reg := TRegistry.Create(KEY_ALL_ACCESS); except end; end; |
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Mi 21.10.09 21:20
OK, das hat schon mal geklappt. Jetzt kommt kein Fehler mehr. Nur habe ich nun das Problem, dass ich den Wert in der Registry nicht mehr schreiben kann. Und wenn ich "Als Administratot ausführen" mache, kommt der Fehler auch.
Wie macht mand denn Änderungen an HKLM, wenn UAC aktiviert ist?
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 21.10.09 23:29
Dafür muss man dann Adminrechte anfordern.
Nebenbei gibts ab Vista die Funktion IsUserAnAdmin, mit der man das testen kann. Dann braucht man kein try..except...
msdn.microsoft.com/e...ibrary/bb776463.aspx
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Mi 21.10.09 23:41
Das isAdmin mache ich ja schon, aber es ist in diesem Fall nicht hilfreich, weil zB. ein Admin mit UAC trotzdem ein Admin bleibt, obwohl er keine uneingeschränkten Rechte hat.
Aber der Ansatz mit dem "als Admin öffnen" sollte funktionieren. Danke für den Hinweis 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 22.10.09 00:07
Leg ein Manifest dabei, dass deine Anwendung echte Adminsitratorechte benötigt. Dann kommt schon beim Start die UAC.
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Do 22.10.09 00:24
Das wäre auch ne Idee, aber mein Programm startet, wenn vom User gewünscht, im Autostart. Dann müsste man jedes mal bestätigen. Das wäre doch sehr nervig. Kann man dieses Verhalten irgendwie umgehen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 22.10.09 01:05
Was passiert wenn du du vor dem Schreiben IMPERSONATELOGGEDONUSER aufrufst? Kommt dann die UAC?
www.michael-puff.de/...ts/Impersonate.shtml
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 22.10.09 06:20
LonghornUser hat folgendes geschrieben : | Das isAdmin mache ich ja schon, aber es ist in diesem Fall nicht hilfreich, weil zB. ein Admin mit UAC trotzdem ein Admin bleibt, obwohl er keine uneingeschränkten Rechte hat. |
Ich weiß nicht was dein IsAdmin macht, aber IsUserAnAdmin ist genau dafür um festzustellen, ob du über die UAC die Rechte hast... 
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: Do 22.10.09 13:57
Funktioniert das denn auch in XP?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 22.10.09 15:23
Warum sollte es nicht? Einmal in der Hilfe geguckt:
Zitat: | Requires Windows Vista, Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0 SP3 and later. |
Außerdem hätte man es schnell mit meinem Beispielprogramm ausprobieren können, wenn XP vorhanden ist.
|
|