2012-03-30 8 views
0

ich auf einige Code arbeiten, die mit Parsing-Dateien handelt (hauptsächlich XML, aber es gibt einige Arten benutzerdefinierte Datei in auch dort). Ich habe ein paar Try-Cats um den Parsing-Code herum angelegt, mit der Ausnahme, dass beim Laden oder Zugriff auf die Dateien etwas schief geht und diese Ausnahmen zurück an das aufrufende Objekt/die Methoden gesendet werden.eine Datei und Benutzereinschränkungen durch UAC Schreiben

Hier ist ein Beispiel:

/* 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.\nDetails: " 
      + fileLoadEx.Message); 
    } 
    catch (FileNotFoundexception fileNotFoundEx) 
    { 
     throw new ParsingException("Could not find file.\nDetails: " 
      + fileNotFoundEx.Message); 
    } 
    catch (NullReferenceException nullRefEx) 
    { 
     throw new ParsingException("Could not load data from file.\nDetails: " 
      + nullRefEx.Message); 
    } 
} 

Ich bin auf der Suche für die Ausgabe der Parsing-Ausnahmen (was das betrifft geworfen und alle anderen Ausnahmen) in eine Protokolldatei (Dateinamen und das Format nicht für jetzt nichts, aber ich denke an eine einfache Textdatei mit dem Namen debug.txt). Da diese Software jedoch auf verschiedene Windows-Versionen (oder sogar andere Umgebungen über Mono und ähnliche Tools/VM) geladen werden kann, mache ich mir Sorgen darüber, wo ich diese Debug-Datei platzieren kann.

Ich stütze mich auf Windows 7 Professional mit ausgeschalteter UAC, aber wenn diese Software auf einen Rechner mit aktivierter UAC (entweder unter XP, Vista oder 7) geladen wird, ist meine Auswahl an möglichen Ausgaben stark eingeschränkt Verzeichnisse dieser Debug-Datei. zur Ausgabe definitiv in der Lage sein, unabhängig von der OS-Version und UAC-Einstellungen

Gibt es bestimmte Verzeichnisse, die meine Software? Ich dachte, dass der Startpfad der Software in Ordnung sein sollte (Programme \ Mein Projekt \ oder Programmdateien (x86) \ Mein Projekt \ zum Beispiel), aber wird es Umstände geben, unter denen dies nicht möglich ist? (Abgesehen davon, ob das Startverzeichnis natürlich schreibgeschützt ist) Oder gibt es irgendwelche Verzeichnisse, die sich für diese Art von Dingen als besser erweisen könnten? Ich hoffe, ein Verzeichnis zu finden, zu dem der Benutzer leicht navigieren kann.

Antwort

1

Mit UAC auf Program Files ist nicht eingeschaltet.

Blick auf Environment.SpecialFolders. Localapplicationdata ist eine vernünftige Wahl

Standard-Trick einen Ordner für Sie Unternehmen unter ihm zu erstellen ist, dann ein unter das für Ihre Anwendung, und dann in dort setzen Sie Ihre Dateien.

bekannten Standort und UAC wirkt es nicht.

+0

Sorry für die späte Antwort. Am Ende haben wir das implementiert, nur dass es in einer isolierten Instanz ein Problem verursacht hat. Unsere Lösung wurde auf einem Client-Rechner installiert. Der Client führt die Software als "Admin" aus, und die Benutzerkontensteuerung ist deaktiviert, aber "System.UnauthorizedAccessException: Zugriff auf den Pfad wird verweigert". Allerdings (und hier ist, wo es seltsam wird), wenn der Client UAC erneut aktiviert, erhalten sie nicht die UnathorizesAccessException. Irgendwelche Gedanken oder Vorschläge? Ihre IT-Politik ist etwas, das wir natürlich nicht kontrollieren können und von dem wir nichts wissen. –

+0

Es wird in den virtuellen Laden gebracht, wenn UAC eingeschaltet ist, wäre meine Vermutung. Stellen Sie sicher, dass Sie und der Benutzer auf der gleichen Seite sind, wenn Sie über das Ausführen als Administrator sprechen. –

+0

"Es scheint, dass es mit meinen Zugriffsrechten zu tun hat, obwohl ich Administrator auf diesem PC bin. Ich habe sogar versucht, UAC in Windows auszuschalten, aber ohne Erfolg." Dann später: "Ich habe das Kontrollkästchen 'Als Administrator ausführen' deaktiviert (in den Eigenschaften der Verknüpfung unter Kompatibilität), nachdem ich die UAC früher als Teil der Tests wieder aktiviert hatte. Wenn Sie dieses Kontrollkästchen erneut ankreuzen, erhalten Sie wichtige Zugriffsrechte zum Schreiben an diesen Speicherort . " –