Невозможно изменить файл в папке «Все пользователи» в Windows 7 с помощью программирования на C # - PullRequest
1 голос
/ 05 декабря 2011

Вот мой сценарий,

У меня есть надстройка для Outlook, в которую я записываю некоторую информацию в общий файл через эту надстройку. Когда я создавал устанавливаемую программу, я сохранял общий файл в папке «Все пользователи» (Общая папка данных приложения). Когда я устанавливаю эту надстройку на XP, она работает отлично и не выдает никаких разрешений.

Теперь, когда я перемещаю это приложение в Windows 7, я получаю исключение для доступа к файлу. Со ссылкой на некоторые блоги, я добавил папку для конкретного приложения в разделе «Все пользователи». После этого я также не могу записать в этот файл.

Есть ли что-нибудь еще, что мне нужно сделать, с помощью которого я смогу записать в этот файл.

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

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

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

Другой вариант - сохранить эти настройки для каждого пользователя и таким образом избежать проблем с безопасностью.

0 голосов
/ 10 декабря 2011

Чтобы добавить определенные права доступа к файлам, я использую вспомогательную функцию расширения, которую я создал для этого: (Вам нужны права доступа, чтобы сделать это для файла)

public static void AddAccessEveryone(this FileInfo file, FileSystemRights rights, AccessControlType accessType)
{
    FileSecurity access = file.GetAccessControl();
    SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
    access.AddAccessRule(new FileSystemAccessRule(everyone, rights, accessType));
    file.SetAccessControl(access);
}

Вы называете это так:

file.AddAccessEveryone(FileSystemRights.Read | FileSystemRights.Write, AccessControlType.Allow);

Вы должны добавить ссылку System.ServiceModel в свой проект.Вы также должны вызывать его после того, как файл был создан, это не имеет смысла вызывать его раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...