quitar puedo permisos permiso necesario los inhabilitaste habilitar dar contactos como bloquear aplicaciones administrador activar c# .net winforms permissions user-accounts

c# - puedo - ¿Cómo otorgar permiso completo a un archivo creado por mi aplicación para TODOS los usuarios?



no puedo dar permisos a aplicaciones (2)

La herramienta que desarrollo debe otorgar derechos de acceso "Control total" a un archivo creado por él. Debe leerse, modificarse y eliminarse de todas las cuentas de Windows e incluso posibles cuentas futuras. ¿Podría esto ser logrado?

Sé que puedo probar esto para un SPECIFIC_USER:

FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow); FileSecurity fSecurity = File.GetAccessControl(filePath); fSecurity.SetAccessRule(rule); File.SetAccessControl(filePath, fSecurity);

¿Pero cómo lo concedo a todos los usuarios? ¿Y hasta posibles cuentas futuras? Si la última parte no es posible, ¿cómo cumplir con el primer requisito?

Gracias.

EDITAR:

Este es el código que funcionó para mí. Tomado del enlace del respondedor.

private bool GrantAccess(string fullPath) { DirectoryInfo dInfo = new DirectoryInfo(fullPath); DirectorySecurity dSecurity = dInfo.GetAccessControl(); dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); dInfo.SetAccessControl(dSecurity); return true; }

Tenga en cuenta el PropagationFlags.NoPropagateInherit que se requiere (mencionado hacia el último en el enlace). Otorga privilegio incluso a cuentas futuras.


Nota para las personas que usan esto.

Al usar cadenas literales para FileSystemAccessRule , debería ser WellKnownSidType.WorldSid lugar de "everyone" .

La razón es porque hay varios idiomas de Ventana y Todos solo se aplican a los de EN, por lo que para el español, podría ser "Todos" (u otra cosa).

using System.Security.AccessControl; using System.Security.Principal; using System.IO; private void GrantAccess(string fullPath) { DirectoryInfo dInfo = new DirectoryInfo(fullPath); DirectorySecurity dSecurity = dInfo.GetAccessControl(); dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); dInfo.SetAccessControl(dSecurity); }


Tendrá que dar control total al grupo "Todos" en la máquina. Encontré this publicación en MSDN que habla al respecto.

Espero que esto funcione para usted.