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.