Если вы используете пространства имен System.Management
и System.Management.Instrumentation
, вы можете использовать метод Directory.GetAccessControl
для получения доступа к папке.Затем вы можете использовать методы AddAccessRule
и SetAccessControl
, чтобы фактически применить ваши новые разрешения.Когда вы закончите, вы можете удалить свои новые разрешения.Вот статья, в которой рассказывается, как изменить разрешения для папки:
http://www.redmondpie.com/applying-permissions-on-any-windows-folder-using-c/
Основной код, используемый этим автором, выглядит следующим образом:
DirectoryInfo myDirectoryInfo = new DirectoryInfo(yourFolderHere);
// Get a DirectorySecurity object that represents the
// current security settings.
DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
// Builds a new user string for who we want to give permissions to
string User = System.Environment.UserDomainName + "\\" + yourUserName;
// Creates the permissions to apply
myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User,
FileSystemRights.FullControl, AccessControlType.Allow));
// Set the new access settings.
myDirectoryInfo.SetAccessControl(myDirectorySecurity);
// Showing a Success Message
MessageBox.Show("Permissions Altered Successfully");
}
Что касается установки владельца, вот хорошая статья о том, как это сделать:
C # - Как использовать DirectorySecurity.SetOwner ()?У меня проблемы
Однако, если вы хотите назначить владельцем кого-то другого (поскольку я предполагаю, что вам не нужно назначать права владения пользователю, когда у него уже есть доступ кназначить права владения), этот метод не работает, я не верю.Я нашел документацию о том, как установить владельца, чтобы быть кем-то, кроме вас.Вот ссылка:
http://blog.salamandersoft.co.uk/index.php/2009/10/setting-the-owner-of-files-and-directories-in-c/