KajLao Ответов: 2

Сделать файл не перемещаемым, копируемым или удаляемым? [С#]


Здравствуйте, ребята, можно ли сделать файл рабочего стола не перемещаемым, копируемым или удаляемым с помощью Visual Studio - C#? Это было бы полезно для моего приложения. Спасибо!

Что я уже пробовал:

На YouTube есть несколько учебников о том, как это сделать вручную, но я не могу узнать, как это сделать в Visual Studio. Помощь очень ценится.

Michael_Davies

Измените права доступа и безопасность файлов;

https://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesecurity(v=против 110). aspx

PIEBALDconsult

Нет.

2 Ответов

Рейтинг:
2

Jochen Arndt

Вы можете предотвратить удаление (и перемещение), установив атрибут только для чтения для файла с помощью Файл.Метод SetAttributes (String, FileAttributes) (System.IO)[^].

Для получения прав доступа, зависящих от пользователя и группы, используйте Файл.Метод SetAccessControl (String, FileSecurity) (System.IO)[^].

Однако оба метода требуют достаточных привилегий для изменения атрибутов файла и прав доступа (обычно ваше приложение выполняется владельцем файла).

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

Поскольку это файл рабочего стола, владельцем будет вошедший в систему пользователь. Это всегда может изменить атрибуты и права доступа, чтобы получить полный доступ или предоставить доступ другим.


Dave Kreskowiak

МММ...это не совсем так. Вы все еще можете удалить и переместить файл, помеченный только для чтения.

Вы не можете удалить или переместить файл в папку, помеченную как только для чтения.

Jochen Arndt

Уупс.
Спасибо за поправку.

Рейтинг:
0

Dave Kreskowiak

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

Но, на первый взгляд, вы не можете предотвратить определенные вещи.

1) Можете ли вы предотвратить копирование файла?

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

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

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

2) Можно ли сделать файл рабочего стола не перемещаемым, ... или удаляемым

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

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

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

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


В принципе, у вас нет практического способа предотвратить что-либо из того, что вы указали.


KajLao

Но возможно ли это, если им нужны права администратора для удаления или перемещения файла? Я видел это в других потоках, но их код не будет работать.

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

Dave Kreskowiak

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

Попробуйте сами. Получить свойства на C:\Users\Public\Desktop откройте папку и перейдите на вкладку Безопасность. В поле" группа имен пользователей "нажмите кнопку" пользователи " или "интерактивный", и вы сможете проверить разрешения, которые имеет учетная запись для этой папки. Вы должны быть администратором, чтобы увидеть все это.

Dave Kreskowiak

Я попытался отключить все разрешения для файла вручную, и он не будет работать, чтобы скопировать, удалить, переместить или переименовать файл.. значит, это должно сработать?
Неправильный. Удаление / перемещение-это операции не с файлом, а с папкой, содержащей файл.

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