.net - Skriver en fil og brugerbegrænsninger gennem UAC

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder med nogle kodeer, der beskæftiger sig med parsering af filer (hovedsagelig XML, men der er også nogle brugerdefinerede filtyper der). Jeg har fået få forsøg i parsingskoden, uden risiko for at noget går forkert ved indlæsning eller adgang til filerne, og disse undtagelser kastes tilbage til det kaldende objekt/metoder.


Her er et eksempel:


/* main.cs */
public void LoadSomeFile (string \_fullPathToFile)
{
    //create an instance of my fileLoader object
    //which is just a wrapper for the in-built
    //c# and .net methods for loading a file
    FileLoader myFileLoader = new FileLoader();

    try
    {
        //pass the fileLoader the location the file
        //to be loaded
        myfileLoader.LoadAFile(\_directoryAndFileName);
    }
    catch (ParsingException parseEx)
    {
        //code to create or append to debug log file
    }

    //once the file has been loaded and parsed,
    //or if it fails, close the fileLoader
    myFileLoader.Close();
}

/* ParsingException class */
public class ParsingException : System.Exception
{
    public ParsingException()
    {
    }

    public ParsingException(string message, Exception innerException)
    {
    }

    public ParsingException(string message)
        : base(message)
    {
    }


/* in FileLoader.cs */
public void LoadAFile(string \_fullPathToFile)
{
    try
    {
        /* load the file from disk */
    }
    catch (FileLoadException fileLoadEx)
    {
        throw new ParsingException("Could not load file.
Details: "
            + fileLoadEx.Message);
    }
    catch (FileNotFoundexception fileNotFoundEx)
    {
        throw new ParsingException("Could not find file.
Details: "
            + fileNotFoundEx.Message);
    }
    catch (NullReferenceException nullRefEx)
    {
        throw new ParsingException("Could not load data from file.
Details: "
            + nullRefEx.Message);
    }
}


Jeg søger at udstille parsing-undtagelserne (og eventuelle andre undtagelser, der kastes for den sags skyld) til en logfil (filnavnet og formatet betyder ikke noget for nu, men jeg tænker på en simpel tekstfil med navnet debug. txt). Men da dette software kan blive indlæst på forskellige versioner af Windows (eller endda forskellige miljøer via Mono og lignende værktøjer/VM), er jeg bekymret for, hvor jeg kan placere denne fejlfindingsfil.


Jeg bygger på Windows 7 Professional med UAC slukket, men hvis denne software er indlæst på en maskine med UAC tændt (enten på XP, Vista eller 7), vil jeg være stærkt begrænset i mit valg af mulige outputmapper af denne fejlretning fil.


Er der nogen specifikke mapper, som min software vil helt sikkert kunne sende til, uanset OS-version og UAC-indstillinger? Jeg tænkte på, at softwarens opstartsti skulle være ok (Programmer \ My Project \ eller Program Files (x86) \ My Project \ for eksempel), men vil der være omstændigheder, når dette er utilgængeligt? (Bortset fra om Startup-mappen er lavet Læs kun, selvfølgelig) Eller er der nogen mapper, der kan vise sig bedre for denne slags ting? Jeg håber at finde en mappe, som brugeren kan navigere til nemt.

Bedste reference


Med UAC på Programfiler er ikke tændt.


Kig på Environment.SpecialFolders. LocalApplicationData er et rimeligt valg


Standardtrick er at oprette en mappe til din virksomhed under den, så en under den til din app, og sæt derefter dine filer derinde.


Kendt placering og UAC vil ikke påvirke det.

Andre referencer 1


Bortset fra den, Tony foreslår, kan du også gøre brug af isoleret opbevaring,


http://msdn.microsoft.com/en-US/library/3ak841sy(v=vs.110).aspx[2]