none
UnauthorizedAccessException beim Auslesen des Programme-Ordners RRS feed

  • 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?

    Mittwoch, 13. Juli 2011 07:47

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
    Mittwoch, 13. Juli 2011 12:31
    Beantworter

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!
    Mittwoch, 13. Juli 2011 07:54
  • 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.)

    Mittwoch, 13. Juli 2011 11:57
  • Schade,

    Windows 7 ist echt hart in Sachen Sicherheit.


    Please 'Mark as Answer' if I helped. This helps others who have the same problem!
    Mittwoch, 13. Juli 2011 12:05
  • 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
    Mittwoch, 13. Juli 2011 12:31
    Beantworter
  • Hallo Elmar,

    danke, mit Environment.GetFolderPath funktioniert es (erstaunlicherweise)!

    Gruß ubsch

    Mittwoch, 13. Juli 2011 18:27
  • Liegt halt daran das du jetzt nicht mehr auf "C:\Programme" sondern auf "C:\Program Files" zugreifst!
    Donnerstag, 14. Juli 2011 08:42