Приложение C# не может читать / записывать файлы, созданные администратором при запуске в ограниченной учетной записи пользователя XP
У меня есть приложение, которое может использоваться всеми пользователями (администраторами или пользователями с ограниченными возможностями) в.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 ответа
Да, это метод SetAccessControl, хорошо, здесь есть хороший пример (сообщение от satankidneypie)
Удачи
Я думаю 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);
Примечание. Важно, чтобы вы получили существующий список контроля доступа из файла, а затем добавили к нему новое правило. Если вы просто создаете новый список контроля доступа с нуля, тогда он полностью перезапишет существующие разрешения.