Приложение C # не может читать / записывать файлы, созданные администратором при запуске в ограниченной учетной записи пользователя XP - PullRequest
5 голосов
/ 11 февраля 2009

У меня есть приложение, которое может использоваться всеми пользователями (с правами администратора или с ограниченными правами) в .NET (особенно на C #).

Когда приложение запускается впервые - оно создает несколько файлов, которые ему нужны, в C: \ Documents and Settings \ All Users \ Documents \ для всех последующих запусков.

Если пользователь с ограниченными правами в XP является ПЕРВЫМ пользователем для запуска приложения, он прекрасно создает файлы, и пользователь с ограниченными правами и администраторы могут нормально работать.

Однако если администратор (или я предполагаю, что другой пользователь с ограниченными правами) первым запустит приложение, тогда пользователь с ограниченными правами НЕ сможет запустить приложение.

Два файла, которые он НЕ может прочитать / записать, если они созданы Администратором, - это файл журнала Log4Net и файл базы данных SQLite.

Файл базы данных SQLite создается с простой .NET File.Copy (sourcepath, destinationpath). Исходный путь - это исходный файл базы данных, установленный вместе с приложением, поэтому при первом запуске он копирует его из C: \ Program Files \ app install \ seed.db

Есть ли способ установить права доступа к файлу при его копировании? Возможно, File.SetAccessControl ()? Мне не ясно, как это работает.

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

Есть идеи? По иронии судьбы все это прекрасно работает в Vista с ограниченными учетными записями / учетными записями администратора - это происходит ТОЛЬКО в XP с учетными записями администратора / ограниченных пользователей.

Ответы [ 2 ]

6 голосов
/ 11 февраля 2009

Я думаю, SetAccessControl - это путь. Может быть, что-то вроде этого:

// get the existing access controls
FileSecurity fs = File.GetAccessControl(yourFilename);

// add the new rule to the existing settings
fs.AddAccessRule(new FileSystemAccessRule(
    @"DOMAIN\Users",  // or "BUILTIN\Users", "COMPUTER\AccountName" etc
    FileSystemRights.Modify,
    AccessControlType.Allow));

// set the updated access controls
File.SetAccessControl(yourFilename, fs);

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

2 голосов
/ 11 февраля 2009

Да, это метод SetAccessControl, хорошо, есть хороший пример здесь (пост от сатанкиднейпие)

Удачи

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