![]() |
Benutzerrechte
Ich habe ein Problem mit Nutzerrechten in Windows10.
Manche wissen, ich spiele mit den Möglichkeiten eines WebDav herum. Soweit klappt alles. Ich habe mir ein kleines Tool gebastelt das meine Festplatten anzeigt, ein WebDav als Laufwerk verbinden lässt oder bei Bedarf wieder trennt. Als kleines Sahnehäubchen wollte ich das Laufwerkssymbol anpassen. Ist über die Registry ja nicht schwierig, eigentlich. Das funktioniert nur über Admin Rechte. Kein Problem, dachte ich. Dem Programm in den Optionen den Admin Status gegeben, Delphi als Admin gestartet. Alles funktioniert. Nur hier ein Problem: Außerhalb Delphi bin ich ein normaler User. Ich sehe nicht die Laufwerke die der Admin anlegte. Starte ich das kleine Programm außerhalb von Delphi als normaler User, kann ich Laufwerke anlegen, die wiederum ein Admin nicht sieht. Das Laufwerksicon kann ich als normaler User nicht wechseln. Das unter dem jeeweiligen User die Laufwerke erstellt/getrennt werden wie gewünscht, sehe ich im cmd Fenster (/net use *). Als User gestartet sehe ich die vom normaluser angelegten, als Admin gestartet sehe ich die vom Admin angelegten. Welche Möglichkeiten habe ich, ohne in Windows näher eingreifen zu müssen? Habe ich überhaupt welche? |
AW: Benutzerrechte
Du kannst dir auf deinem privaten PC einfach in regedit die Rechte auf dem Schlüssel geben, so dass du in den Registry Eintrag auch ohne Adminrechte schreiben kannst.
|
AW: Benutzerrechte
Zitat:
Per Delphi kann ich da nichts machen, oder? Wegen Weitergabe von dem Tool. |
AW: Benutzerrechte
Das Problem kenne ich, bin zufälligerweise heute wieder drüber gestolpert. Ich helfe mir dann meist, in dem ich einen Datei-Browser (Explorer, Total Commander) elevated (als Admin) starte und einfach nur einmal auf das Share zugreife, danach ist es ganz verfügbar. Alternative im als Admin laufenden Delphi im Datei-Öffnen-Dialog nur einmal drauf zugreifen...
Insofern wird's ziemlich sicher auch Code dafür geben, ohne dass man an Rechten rumbastelt. (PS: ![]() (PS #2: das funktioniert natürlich nur, weil Windows sich die Credentials gemerkt hat... wenn ich über Deinen Fall weiter nachdenke, müsstest Du für diesen Anwendungsfall wohl die Verbindung für beide Access Token erstellen) |
AW: Benutzerrechte
Zitat:
Ich habe mich entschieden alles ein wenig zu umgehen. Ich habe beschlossen das Tool nur auf Nutzer Ebene zu empfehlen und ein kleines Setup dazu gebastelt. Das Setup setzt die Rechte des Registry Key und alles unter dem, wie benötigt und gut ist. Nicht die eleganteste "Lösung" aber die, sie für mich am besten umsetzbar ist. |
AW: Benutzerrechte
Entschuldige, ich hab Dein Problen glaube ich etwas falsch wahrgenommen.
Registry-Rechte aufweichen im Installer ist irgendwie sehr unschön. Ging es nur darum, das Icon zu setzen, während das Programm non-elevated läuft?
Delphi-Quellcode:
ShellExecute(Application.MainForm.Handle, 'runas', PChar(ParamStr(0)), PChar(ADrive), nil, SW_HIDE);
Delphi-Quellcode:
Besser als sich selbst mit Parametern aufzurufen wäre natürlich eine Mini-Konsolen-Exe ohne alles, nur mit dieser Funktion, um die Elevation so klein wie möglich zu halten.
program blub;
... begin if FindCmdLineSwitch('seticon') then begin // set icon for ParamStr(2) in registry Exit; end; Application.Initialize ... Das wäre auf jeden Fall "korrekteres" Vorgehen, denn: * Programme sollte non-elevated laufen können (siehe auch MS-Vorgaben für Compatible with Windows &c) * Elevaten nur für einzelne Aktionen ist immer sicherer als Programme ganz elevated laufen zu lassen * Programme sollten keine Rechte aufweichen wo nicht unbedingt nötig (siehe AV-Heuristiken) Ja, dann fragt das Programm jedesmal nach Admin-Rechten, wenn eine Verknüpfung erstellt wird. Würde es, wenn das Programm selber elevated läuft, ja auch, und entspricht dem, was passiert. |
AW: Benutzerrechte
Ja, mein Problem sitzt an mehreren Stellen und ich weiß das meine Lösung im Grunde nicht toll ist.
Das Tool um das es geht, verbindet ein NavDav als Netzlaufwerk. Mache ich das als normaler Benutzer, sieht der Admin User das Laufwerk nicht. Mache ich das mit dem Tool als Admin, sieht der normale Benutzer das Laufwerk nicht. An der Stelle habe ich mich entschieden alles für den normalen Benutzer zu lassen. Zum Schluss wollte ich dann noch "mal eben" einbauen dass das Icon des neuen Netzlaufwerk geändert wird. Was komplizierter ist als ich dachte (für mich). Ich habe es über die Shell versucht, es hat bei mir leider nicht funktioniert. Also habe ich die zweite Möglichkeit probiert, die Registry. Das funktioniert an sich problemlos, benötigt aber Adminrechte. Die ich dem Programm nicht geben möchte, aus oben genannten Grund. Ein Teufelskreis :| |
AW: Benutzerrechte
Du könntest dir auch eine Registrierungsdatei bauen und diese dann mit erhöhten Privilegien ausführen, funktioniert einwandfrei.
Code:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE] "Test"="0001"
Code:
ShellExecute(Application.Handle, 'runas', 'cmd.exe', '/c test.reg', nil, SW_SHOWNORMAL)
|
AW: Benutzerrechte
Da kann man aber auch direkt die reg.exe als Admin ausführen
![]() oder sein Programm als Admin starten oder einen Thread kurzzeitig als Admin und dann die WinAPI oder TRegistry oder ... bzw. statt "admin" gezielt nur die nötigen Rechte anfordern. |
AW: Benutzerrechte
Zitat:
Ich probiere es am Wochenende. @himitsu Genau solche Möglichkeiten habe ich am Anfang versucht durchzuprobieren. Leider ohne Erfolg. Was an mir liegen wird. Das es die Möglichkeiten gibt habe ich gelesen. Das Umsetzen hat nicht geklappt. Deshalb habe ich nach einer vermeintlich einfacheren Lösung gesucht und bin auf die mit der Registry gestoßen. Ich habe die Lösung mit kleinem Setup übrigens verworfen. Das dies eigentlich besch***** ist, ließ mir keine Ruhe. Ich habe nu einfach einen Button eingebaut der Regedit an der benötigten Stelle öffnet und eine 3 Zeilen Anleitung welche Rechte wo geändert werden müssen. Da Regedit ja selbst die Admin Rechte fordert, reicht das fürs erste. @himitsu @shebang Ich probiere am Wochenende ob ich Eure Tipps hinbekomme. Nur den Thread als Admin starten, daran habe ich nicht gedacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz