Проблема с записью файлов в Windows 7 Professional в С#

У меня есть приложение на С#, в котором я записываю некоторые данные в файл. Я столкнулся с проблемой в Windows 7 Professional: когда я пишу данные в C:\ProgramData, выдается отказ в доступе. Если я вхожу в систему с учетной записью администратора, эта проблема исчезает, и если я вхожу в систему с какой-либо другой учетной записи, имеющей административные права, эта проблема возникает. Эта проблема возникает только на Windows 7 Professional, она отлично работает на всех других версиях Windows 7, а также на Windows Vista.

try
{
XmlTextWriter myXmlTextWriter = new XmlTextWriter("Configuration.xml", null);
            myXmlTextWriter.Formatting = Formatting.Indented;
            myXmlTextWriter.WriteStartDocument(true);
            myXmlTextWriter.WriteDocType("ApplicationConfigurations", null, null, null);
            ////myXmlTextWriter.WriteComment("This file represents another fragment of a book store inventory database");
            myXmlTextWriter.WriteStartElement("Configuration");
            myXmlTextWriter.WriteElementString("firstElement",  pe.ToString());
            myXmlTextWriter.WriteEndElement();

            myXmlTextWriter.WriteEndDocument();
            myXmlTextWriter.Flush();
            myXmlTextWriter.Close();
}catch(Exception e)
{
    //Exception is thrown in Win7 professional
}

person Muhammad Ummar    schedule 24.05.2010    source источник


Ответы (1)


Это нормально, учетные записи пользователей без прав администратора не имеют права на запись в c:\programdata. По умолчанию назначаются только права чтения, выполнения и списка. Сюда входят учетные записи администраторов с включенным UAC.

Папка AppData должна использоваться для записи файлов. Получите путь к этой папке с помощью Environment.GetFolderPath().

person Hans Passant    schedule 24.05.2010
comment
Ты уверен? Сейчас я тестирую его в Windows 7, и я могу нормально записывать в папку ProgramData, даже работая без повышенных прав в учетной записи с ограниченными правами. Однако, если я попытаюсь записать в папку Program Files, используя тот же тест, произойдет сбой из-за несанкционированного доступа. - person Trevor Elliott; 04.01.2013
comment
Да. Ваш комментарий, однако, является обычным ответом, который я получаю. Я не могу доказать это, но я уверен, что есть установщики, которые решают распространенную проблему. В стандартной установке Windows нет каталога, к которому все пользователи имеют доступ для записи. Cue в ProgramData, ах, вот где программы хранят свои данные! Потом они обнаруживают, что это не так. Таким образом, они решают свою проблему, заставляя программу установки сделать каталог ProgramData доступным для записи для всех пользователей. Бумшакалака. - person Hans Passant; 04.01.2013