Avatar billede heinzdmx Nybegynder
19. juli 2010 - 18:17 Der er 2 kommentarer og
1 løsning

UnauthorizedAccessException bliver throwed ved Directory.GetFiles("C:\windows")

Jeg prøver at få lavet en liste over exe filer i givne mappe og alle undermapper.

Til det bruger jeg, eks ved "C:\windows":

string TopDirectory = @"C:\windows";
Directory.GetFiles(TopDirectory, "*.exe", SearchOption.AllDirectories);

Når det så kører får jeg en System.UnauthorizedAccessException
når den når til 'C:\Windows\Temp'

Og så stopper den ligesom der, jeg har prøvet at sætte en try-catch blok op, men den kører aldrig videre end den mappe, og kører exception handleren i et loop.

Er der nogen der kender en måde at trumfe igennem at den skal ignore den exception, eller måske en helt anden måde at sørge for denne funktion?

udsnit af min kode:

  private List<string> Apps
        {
            get
            {
                List<string> apps = new List<string>();

                // loader alle elementer fra en serialized List
                foreach (string item in Serializer.LoadItems)
                {
                    if (File.Exists(item))
                        apps.Add(item);
                    else if (Directory.Exists(item))
                    {
                        foreach (string file in Directory.GetFiles(item, "*.exe", SearchOption.AllDirectories))
                        {
                          apps.Add(file);
                        }
                    }
                }
                return apps;
            }
        }
Avatar billede janus_007 Nybegynder
19. juli 2010 - 18:46 #1
Tjek op på hvad der er af permissions på temp-folderen, den bruger som du eksekvere din applikation med skal have rettigheder.

En anden ting... som jo naturligvis ikke har noget at gøre med om det virker eller ej.. Men man bør ikke bruge properties til den slags der. Et metodekald med et godt navn som indikerer hvad man får retur er at foretrække. Best practice siger, brug properties til noget som er instant, og i dit tilfælde vil det tage tid at løbe folderne igennem.
Avatar billede heinzdmx Nybegynder
19. juli 2010 - 18:52 #2
Jeg er ikke interreseret i at programmet skal få uac til at komme frem, er mere interesseret i at den skal ignore de mapper der ikke er adgang til. Hvordan griber jeg det så an?

Det er noteret, tak for info :)
Avatar billede heinzdmx Nybegynder
19. juli 2010 - 22:24 #3
Jeg fandt selv en løsning på problemet.

Jeg bruger i stedet en metode, der tager en process som argument, som derefter beregnes mappen på det Process.Modul[0].FileName, hvilket efter hvad jeg har kunne finde, for det meste er exe filen der er startet. Følgende er hvad jeg bruger:

private bool isRemovedApp(Process p)
        {
            foreach (string item in Serializer.LoadItems)
            {
                //eks på item:
                // C:\Windows
                // C:\Program Files\Prog.exe

                if (File.Exists(item))
                {
                    if (p.Modules[0].FileName.ToLower() == item.ToLower())
                        return true;
                }
                else if (Directory.Exists(item))
                {
                    string oldPath = Directory.GetParent(p.Modules[0].FileName).FullName.ToLower();

                    while (Directory.GetDirectoryRoot(oldPath).ToLower() != oldPath)
                    {
                        if (item.ToLower() == oldPath)
                            return true;
                        else
                            oldPath = Directory.GetParent(oldPath).FullName.ToLower();
                    }
                }
            }
            return false;
        }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester