Запись файла и пользовательские ограничения через UAC - PullRequest
0 голосов
/ 30 марта 2012

Я работаю над некоторым кодом, который имеет дело с синтаксическим анализом файлов (в основном XML, но там также есть несколько пользовательских типов файлов). У меня есть несколько попыток отладки кода при вероятности, что что-то пойдет не так при загрузке или доступе к файлам, и эти исключения будут возвращены обратно в вызывающий объект / методы.

Вот пример:

/* 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);
    }
}

Я хочу вывести исключения для анализа (и любые другие исключения, сгенерированные в этом отношении) в файл журнала (имя файла и формат пока не имеют значения, но я думаю о простом текстовом файле с имя debug.txt). Однако, поскольку эта часть программного обеспечения может быть загружена в разные версии Windows (или даже в различные среды с помощью Mono и аналогичных инструментов / ВМ), меня беспокоит, где я могу разместить этот файл отладки.

Я работаю на Windows 7 Professional с отключенным UAC, но если это программное обеспечение загружено на компьютер с включенным UAC (на XP, Vista или 7), я буду серьезно ограничен в выборе возможных выходных каталогов этого файла отладки.

Существуют ли какие-либо конкретные каталоги, в которые мое программное обеспечение сможет выводить данные, независимо от версии ОС и настроек UAC? Я думал, что путь запуска программного обеспечения должен быть в порядке (например, Program Files \ My Project \ или Program Files (x86) \ My Project \), но будут ли обстоятельства, когда это будет недоступно? (Кроме того, если каталог запуска сделан только для чтения, конечно) Или есть каталоги, которые могут оказаться лучше для такого рода вещей? Я надеюсь найти каталог, по которому пользователь сможет легко перемещаться.

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Кроме предложенного Тони, вы также можете использовать изолированное хранилище,

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

1 голос
/ 30 марта 2012

Когда UAC в программных файлах не включен.

Посмотрите на Environment.SpecialFolders. LocalApplicationData - разумный выбор

Стандартный трюк состоит в том, чтобы создать папку для вашей компании под ней, затем одну для этой папки для вашего приложения, а затем поместить туда свои файлы.

Известное местоположение и UAC не повлияет на него.

...