Ответ 1
Это UAC. У вас есть ваша программа, запускаемая администратором для создания/удаления файлов/папок в этом специальном хранилище.
Я устанавливаю свое приложение в директорию "Program Files". И я устанавливаю данные в директорию ProgramData:
Environment.SpecialFolder.CommonApplicationDataSTRONG >
В 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>
Это UAC. У вас есть ваша программа, запускаемая администратором для создания/удаления файлов/папок в этом специальном хранилище.
Легкое для понимания объяснение различных мест, в которых вы можете хранить данные программы, можно найти здесь:
Что касается ProgramData, он говорит:
FOLDERID_ProgramData/ System.Environment.SpecialFolder.CommonApplicationData Пользователь никогда не захочет просматривать здесь, в Проводнике, и настройки изменены здесь должен влиять каждый пользователь на машина. Расположение по умолчанию % systemdrive%\ProgramData, который является скрытая папка, при установке Виндоус виста. Вы хотите создать ваш каталог и установите ACL необходимо во время установки.
это концептуальная проблема с первого взгляда:
НЕ следует использовать каталог "ProgramData", но некоторые файлы, специфичные для пользователя. Необходимые установочные данные должны быть установлены в "программных файлах" или в реестре.