Записать в папку "ProgramData" (W7 и Vista). NET

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

Environment.SpecialFolder.CommonApplicationData​​STRONG >

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

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

В XP все работает нормально. Но не под Vista или W7 OS.

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

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

Редакция:

У меня есть этот код в файле 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>

Ответы

Ответ 1

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

Ответ 2

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

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 необходимо во время установки.

Ответ 3

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

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