Запись в папку «ProgramData» (W7 и Vista) .NET - PullRequest
16 голосов
/ 02 марта 2010

Я устанавливаю свое приложение в каталоге «Program Files». И я устанавливаю данные, в каталоге «ProgramData»:

Environment.SpecialFolder.CommonApplicationData

В программе Data я создал папку для сохранения данных. Пример:

C: \ ProgramData \ MyApp \ MyData \ здесь у меня есть файлы и папки

Под ХР все работает нормально. Но не под Vista или W7.

Я могу читать файлы в этом каталоге, но не могу писать файлы, не могу создавать новые файлы и т. Д. Пользователь вошел в систему как администратор.

Где я могу хранить данные без ограничений? Мне нужно хранить данные в папке, видимой для всех пользователей

РЕДАКТИРОВАНИЕ:

У меня есть этот код в моем файле app.manifest:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- Opciones del manifiesto de Control de cuentas de usuario
             Si desea cambiar el nivel de Control de cuentas de usuario de Windows, reemplace el 
             nodo requestedExecutionLevel por alguno de los siguientes.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Si desea utilizar la virtualización de archivos y del Registro para la compatibilidad 
            con versiones anteriores, elimine el nodo requestedExecutionLevel.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Ответы [ 3 ]

8 голосов
/ 02 марта 2010

Легкое для понимания объяснение различных мест, где можно хранить данные программы, можно найти здесь:

http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

Что касается ProgramData, то в нем говорится:

FOLDERID_ProgramData / System.Environment.SpecialFolder.CommonApplicationData Пользователь никогда не захочет просматривать здесь в проводнике, и настройки изменились здесь должно влиять каждый пользователь на машина. Расположение по умолчанию % systemdrive% \ ProgramData, который является скрытая папка, при установке Виндоус виста. Вы хотите создать ваш каталог и установить ACL, которые вы нужно во время установки.

5 голосов
/ 02 марта 2010

Это вещь UAC. Ваша программа запущена от имени администратора для создания / удаления файлов / папок в этой специальной папке.

0 голосов
/ 03 мая 2013

это концептуальная проблема на первый взгляд:

Вы НЕ должны использовать каталог «ProgramData», но некоторые пользовательские файлы. Необходимые данные установки должны быть установлены в «программных файлах» или в реестре.

...