Autor Beitrag
3marci
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: So 24.07.11 22:14 
Hallo Leute!

Ich habe ein Programm das seine Einstellungen in einer XML Datei speichert.
Leider kann das Programm (Wenn es bei Vista oder Win7 im Programme-Verzeichnis liegt) die Einstellungen nicht speichern, da hier Admin-Rechte benötigt werden.
Ein Programm ständig als mit Admin-Rechten auszuführen ist natürlich Schwachsinn, darum möchte ich (bevor die XML Datei geschrieben wird die Berechtigung für diese Datei ändern, und zwar so dass jeder darauf Zugriff hat.
So sieht meine Methode zur Zeit aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private static void RemoveSettingsSecurity()
{
  FileSecurity fileSecurity = System.IO.File.GetAccessControl(settingsPath);
  fileSecurity.RemoveAccessRule(new FileSystemAccessRule(System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(), FileSystemRights.FullControl, AccessControlType.Allow)); 
  System.IO.File.SetAccessControl(settingsPath, fileSecurity);
}


Das funktioniert natürlich nicht, denn um Berechtigungen zu ändern braucht man (bzw. das Programm) ja auch Admin-Rechte.
Gibt es eine Möglichkeit nur diese Methode als Admin auszuführen??
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.07.11 22:18 
Nein, du kannst nur für eigenständige Prozesse Adminrechte anfordern. Denn diese werden beim Start des Prozesses gesetzt oder eben nicht. Später lässt sich das aus Sicherheitsgründen nie, wirklich gar nicht, ändern. Es geht auch via COM mit einem InProcess Server, aber auch das ist ein eigener Prozess.

Du kannst aber einfach eine neue Instanz deines Programms mit angeforderten Adminrechten starten und entsprechende Parameter mitgeben. Diese neue Instanz kann dann alles Notwendige mit Adminrechten durchführen.

// EDIT:
Die Einstellungen im eigenen Verzeichnis zu speichern ist allerdings absolut unsauber. Und dann auch noch die Rechte zu ändern, nur um keine saubere Lösung benutzen zu müssen, ist echt... :roll:

Einstellungen usw. gehören ins Anwendungsdatenverzeichnis.

Für diesen Beitrag haben gedankt: 3marci
3marci Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Mo 25.07.11 19:12 
Danke, ja das mit der neuen Instanz hab ich mir auch schon überlegt und so werde ich es wahrscheinlich auch machen.

Zu deinem Kommentar:
Ich bin jemand der gerne mal ein paar Freeware Programme zum testen herunterlädt, das beste davon auswähle und die die zu nichts zu gebrauchen sind lösche.
Was ich dabei immer hasse ist dass manche Programme nicht immer in dem Verzeichnis bleiben wo ich sie hin gepackt habe und sich auf dem PC (mache fast schon unkontrollierbar) verbreiten.

Ich bin nunmal der Meinung ein Programm (gerade portable Programme) sollten in dem Ordner bleiben in den man sie steckt, das vereinfacht das löschen, da es bei einem portable Programm ja keinen Deinstaller gibt.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 25.07.11 19:50 
Zitat:
Ich bin nunmal der Meinung ein Programm (gerade portable Programme) sollten in dem Ordner bleiben in den man sie steckt, das vereinfacht das löschen, da es bei einem portable Programm ja keinen Deinstaller gibt.


Für ein portables Programm geb ich dir recht. Ich käme aber auch nicht auf die Idee ein solches Programm in einen der Programme Ordner zu packen. Durch irgendwelche Tricks doch irgendwas in einem solchen Ordner zu speichern hört sich für mich nach 'gegen das System'-arbeiten an. Mittelfristig (nächstes SP oder nächste Windowsversion) wird dir das nur Probleme bereiten und du wirst vermutlich ständig hinterher programmieren um klassisches Prä-Vista verhalten zu bekommen. Sich dem aktuellen Windowsverhalten anzupassen ist vermutlich für dich und deine potentiellen User einfacher.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 26.07.11 05:58 
Deshalb frage ich einfach den Benutzer wo die Einstellungen gespeichert werden sollen. Portabel, in den Anwendungsdaten, ...

Beim Start suche ich dann einfach zuerst im eigenen Ordner, dann an den anderen Stellen. Das ganze habe ich in der Library auch beschrieben:
www.delphi-library.d...ewtopic.php?p=541637
Die Beschreibung ist allgemein gehalten, nur der Quelltext danach ist für Delphi.

Wenn du das so machst, musst du nicht im System herumpfuschen und der Benutzer hat dennoch alle Möglichkeiten das Programm auch portabel zu nutzen, wenn er es denn möchte.