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