Установить права доступа по умолчанию для папки, созданной в пользовательском установщике - PullRequest
1 голос
/ 04 января 2012

Я создал простой пользовательский установщик, как описано здесь . Мой новый установщик работает как положено. Он создает папку и добавляет путь в файл app.config.

Проблема в том, что для папки установлен флаг «только для чтения», а права на запись для пользователей, не являющихся администраторами, удалены.

Если я вручную создаю папку и устанавливаю разрешения, они сбрасываются при запуске программы установки.

Как я могу указать эти параметры из моего пользовательского установщика?

EDIT:

Я использую код, показанный ниже, чтобы установить разрешения безопасности для всех, и это работает нормально.

// Get the directory info for the existing folder
DirectoryInfo dirInfo = new DirectoryInfo(settingsFileDir);

// Now apply user access permissions to the folder
if (dirInfo != null)
{
    DirectorySecurity security = dirInfo.GetAccessControl();
    security.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
    security.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
    dirInfo.SetAccessControl(security);
}

Когда я пытаюсь установить атрибуты папки для удаления настройки только для чтения, никаких изменений не происходит. Я делаю это с:

dirInfo.Attributes = FileAttributes.Normal;

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Использование приведенного ниже кода фактически устанавливает права доступа к папке.

// Get the directory info for the existing folder
DirectoryInfo dirInfo = new DirectoryInfo(settingsFileDir);

// Now apply user access permissions to the folder
if (dirInfo != null)
{
    DirectorySecurity security = dirInfo.GetAccessControl();
    security.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
    security.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
    dirInfo.SetAccessControl(security);
}

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

Test Folder Properties

1 голос
/ 04 января 2012

Чтобы изменить разрешения, вы можете попробовать использовать XCACLS.EXE в качестве пользовательского действия .

Чтобы изменить атрибут только для чтения, вы можете использовать настраиваемое действие с настраиваемым кодом.Вот статья, которая может помочь: http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/19/how-can-i-change-a-read-only-file-to-a-read-write-file.aspx

...