Benutzer mit den meisten Antworten
UnauthorizedAccessException beim Auslesen des Programme-Ordners

Frage
-
Hallo,
ich möchte die Unterordner im Programme-Ordner auslesen ("C:\Programme" und nur lesen, mit IO.Path.GetDirectories) und erhalte immer eine UnauthorizedAccessException, selbst als Administrator und mit Änderung in Manifest-Datei: requestedExecutionLevel="highestAvailable"
"C:\Programme (x86)" (Windows 7 und .NET Framework 4) kann dagegen ohne Probleme gelesen werden.
Wie kann ich die notwendigen Rechte erhalten, um auch "C:\Programme" auszulesen?
Antworten
-
Hallo,
man sollte grundsätzlich nicht davon ausgehen, auf alle Verzeichnisse und/oder Dateien Zugriff zu haben.
Das gilt auch für Administratoren - die können sich nur das Recht verschaffen (was sie aber nur mit gutem Grund tun sollten).
Ab Windows Vista heißt das erst die UAC abnicken, siehe u. a.: Step 6: Create and Embed an Application Manifest (UAC)Und so sollte man darauf verzichten mit höheren Rechten als unbedingt notwendig auf das System zuzugreifen.
Um die Dateien auszulassen, auf die man (momentan) keinen Zugriff hat, überspringe diese.
Ich hatte vor längerem eine Hilfsklasse für Dateien gezeigt in:GetFiles mit Subdirectories liefert keine Werte
äquivalent kann man mit Verzeichnissen verfahren.
Man sollte nicht von "C:\Programme" ausgehen, denn das ist mittlerweile nur noch eine Verknüpfung.
Verwende Environment.GetFolderPath, um die Programmverzeichnisse über die SpecialFolders Enumeration
via ProgramFiles respektive ProgramFilesX86 zu ermitteln.Gruß Elmar
- Als Antwort markiert ubsch Mittwoch, 13. Juli 2011 18:25
Alle Antworten
-
Hi ubsch,
du kannst versuchen folgendes zu nutzen:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/runas.mspx?mfr=true
So kannst du einen Prozess mit erhöhten Rechten starten.
Dim info As New ProcessStartInfo(processPath) info.UseShellExecute = True info.Verb = "runas" Process.Start(info)
Please 'Mark as Answer' if I helped. This helps others who have the same problem! -
Hi Dennis,
danke für deinen Vorschlag, ändert aber leider nichts!
Außerdem müsste ich dann meine Anwendung teilen und mein Programm von einer anderen Anwendung mit obigem ProcessStartInfo aufrufen. (So habe ich zumindest deinen Vorschlag umgesetzt.)
-
Hallo,
man sollte grundsätzlich nicht davon ausgehen, auf alle Verzeichnisse und/oder Dateien Zugriff zu haben.
Das gilt auch für Administratoren - die können sich nur das Recht verschaffen (was sie aber nur mit gutem Grund tun sollten).
Ab Windows Vista heißt das erst die UAC abnicken, siehe u. a.: Step 6: Create and Embed an Application Manifest (UAC)Und so sollte man darauf verzichten mit höheren Rechten als unbedingt notwendig auf das System zuzugreifen.
Um die Dateien auszulassen, auf die man (momentan) keinen Zugriff hat, überspringe diese.
Ich hatte vor längerem eine Hilfsklasse für Dateien gezeigt in:GetFiles mit Subdirectories liefert keine Werte
äquivalent kann man mit Verzeichnissen verfahren.
Man sollte nicht von "C:\Programme" ausgehen, denn das ist mittlerweile nur noch eine Verknüpfung.
Verwende Environment.GetFolderPath, um die Programmverzeichnisse über die SpecialFolders Enumeration
via ProgramFiles respektive ProgramFilesX86 zu ermitteln.Gruß Elmar
- Als Antwort markiert ubsch Mittwoch, 13. Juli 2011 18:25