| |
|
|
Georg Teles | Ciao,
wüsste jemand, wie man in der Registry Local Machine Werte/Schlüssel anlegen und löschen kann? Habe alle Beiträge in diesem Foro und in anderen durchgestöbert, ab Windows Vista scheint es ein Problem zu sein, da ab hier die Benutzerkontensteuerung hinzugefügt wurde und zum Anderen die Privilegien bei SYSTEM und nicht beim Admin liegen, vor Allem bei Daten, die dem SYSTEM selbst gehören.
Mein Vorhaben ist ein Tweak-Tool um unerwünschte Werte nach Win Installation zu entfernen (An Start anheften s. Papierkorb, Verknüpfungen wie Downloads, 3D Objekte etc im Arbeitsplatz etc.)
In der Registry im Bereich des ROOT ist das problemlos possibile, sobald man bei Local Machine was ändern möchte, kommt die Fehlermeldung 5 / Access denied.
Recherchen im Internet laufen alle auf Ownership hinaus ... bereits existente Werte gehören dem SYSTEM und können nicht ohne Weiteres übernommen werden. Mittels einer .REG File lassen sich die Werte problemlos ändern/löschen, das möchte ich aber vermeiden.
Bleibt mir nur die möglichkeit, .REG File mitzuliefern oder der Hinweis auf die deaktivierung der UAC / Benutzerkontensteuerung per den Nutzer übrig oder gibt es da eine Lösung ?
Recherchen gehen alle in die Richtung OWNER_SECURITY_INFORMATION, PSECURITY_DESCRIPTOR und Privilegien etc., viel im Netz dazu gibt es nicht, lediglich die Arbeit mit RegEdit selbst, vielleicht auch gut so, sodass man nicht auf dumme Gedanken kommt .
Da es aber ThirdParty Software gibt, muss es eine Möglichkeit geben.
'"an Start anheften" bei Papierkorb löschen, problemlos
delentc("Folder\\shell\\pintostartscreen",$80000000)
'3D-Objekte auf dem "Arbeitsplatz" löschen, Fehler 5 = Access Denied
delentc("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}",$80000002)
Proc delentc
'delete kompletten Schlüssel
Parameters ke$, k&
' LOG ---------------------
'AddString(log%,"deleting KEY||!")
Dim key#,260
Clear key#
String key#,0 = ke$
' LOG ---------------------
error& = RegDeleteKey(k&,key#)
'AddString(log%,"deleting "+ke$+" key:||"+Str$(errorchk(error&)))
error& = Regclosekey(Long(handle#,0))
'AddString(log%,"closing key:||"+Str$(errorchk(error&))))
Dispose key#
EndProc
Sonst liefer ich die .REG File eben mit
Grüße Georg |
|
|
| |
|
|
|
Sven Bader | Redest du vom einfachen "als Adiministrator ausführen"? Das kenne ich aber durchaus von Systemsoftware, dass diese das erfordert. Mir fallen zwei Möglichkeiten ein, es dem unbedarften User näherzubringen.
1. Beim Programmstart erkennen, ob Adminrechte vorliegen und eine Meldung ausgeben
2. Deinem Programm einen Launcher vorschalten, welcher es als Admin ausführt. Es erscheint naturalmente trotzdem der Systemhinweis aber der User hat ja nur die Möglichkeit zu bestätigen oder abzubrechen.
1+2. Eine Kombination: wenn die Software ohne Adminrecht gestartet wird, weißt sie darauf hin und startet sich selbst noch mal als Admin.
Ein ganz anderer Ansatz wäre, nur per die entsprechenden Befehle Adminrechte bestätigen zu lassen, indem du die Keys circa reg.exe ausführen lässt.
Hier ein C++ Beispiel (ChatGPT 4, ungetestet aber halbwegs plausibel):
Hier noch ein etwas kaputter (Anführungszeichen weg) und alter Quelltext zru Verwendung von ShellExecuteEx in Profan: [...] |
|
|
| |
|
|
|
Georg Teles | Hi Sven,
mit Adminrechten ist das Problem nicht getan, zumindest mit XProfan nicht ... ich kann mit Adminrechten zwar in die HKCR und HKCU schreiben, aber nicht in die HKLM (local machine).
Ich vermute, es hat alles mit der File und Registry virtualisierung zutun ... da hier Schreibrechte fehlen (da geht es offenschtlich nicht um die Adminrechte sondern die Erlaubnis, in die Registry zu schrieben), kann in die HKEY_Local Machine genauso wie INIs in den Ordner C:\... nicht geschrieben werden (bzw. wird auf AppData\VirtualStore umgeleitet bei fehlenden Rechten).
Da XProfan als 32-Bit Runtime corre, werden die 32 Bit Programme auf 64 Bit Systemen automatisch virtualisert s. [...] Und hier liegt der Hase begraben denke ich - teste mal deinen Vorschlag und schau, ob das circa C++ zumindest realisiert werden kann und ob es mit XProfan dorch noch ginge
A propos, gibt es eig. X3/X4 als 64 Bit Version oder gibt es das nur bei FreeProfan ? |
|
|
| |
|
|
|
H.Brill |
A propos, gibt es eig. X3/X4 als 64 Bit Version oder gibt es das nur bei FreeProfan ?
Das gibt es nur als X3 bei FreeProfan, geschrieben mit Lazarus.
Soviel, wie ich weiß, war es RGH damals zu teuer, eine originale 64 Bit Delphi Version anzuschaffen. |
|
|
| Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 10.04.2023 ▲ |
|
|
|
|
Sven Bader | Ist das nicht genau das was du suchst? Habe ich in der X4 Aiuto gefunden:
Für 64-Bit-Windows mit XProfan und FreeProfan32:
In manchen Fällen benötigen 64-Bit-Programme andere Registry-Einträge als 32-Bit-Programme. Daher hat das 32-Bit-Subsystem unter 64-Bit-Windows eine eigene Registry. Damit aber nun nicht alle Programme per 64-Bit umgeschrieben werden müssen und im Programmcode die gleichen Pfade verwenden können, leitet Windows64 die Schreib- und Lesezugriffe von 32Bit-Programmen automatisch auf die 32-Bit-Kompatibilitätseinträge um. Für die allermeisten Progreamme ist dies auch genau richtig.
Wenn man aber systzemnahe Programme schreibt, möchte man vielleicht auch auf die tatsächlichw Windows64-Registry zugreifen können. Dafür gibt es ab XProfan X2.1eine neue Set-Funktion:
Set("Reg64",n)
n = 0: Defaultmäßg wird die Umleitung zugelassen, die in den allermeisten Fällen per 32-Bit-Programme richtig ist
n = 1: Keine Umleitung: Schreiben und Lesen der 64-Bit-Registry
|
|
|
| |
|
|
|
Georg Teles | Hmm, habe ausprobiert, komme damit nicht weiter
Wie es aussieht, kann man so einfach nicht in die Registry HKEY_Local_Machine schreiben. Mir geht es nur darum, die Verzeichnisse im "Computer" mittels eines eigenen Tools zu entfernen
Aktuell muss ich eine .REG File mitliefern, damit man das zumindest per "Doppelklick" circa RegEdit entfernen kann
Über bekannte Codes kann man mittels Admin-Rechte in alle anderen Regs schreiben und löschen, die HKLM scheint besonders geschützt zu sein ... wie bereits am Anfang erwähnt, kann dies circa die Benutzerkontensteuerung (UAC) umgangen werden ! Das soll aber nicht der richtige Weg sein.
Falls jemand eine Möglichkeit weiß, würde ich mich freuen
Güße Georg |
|
|
| |
|
|