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?¿Cómo otorgar permiso completo a un archivo creado por mi aplicación para TODOS los usuarios?
Sé que puedo probar esto por 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 puedo permitir que todos los usuarios? ¿Y hasta posibles cuentas futuras? Si la última parte no es posible, ¿cómo cumplir con el primer requisito?
Gracias.
EDIT:
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;
}
Nota del PropagationFlags.NoPropagateInherit
que se requiere (mencionado hacia el pasado en el enlace). Otorga privilegio incluso a cuentas futuras.
Nota para las personas, no utilice "todo el mundo", en lugar de usar 'nueva SecurityIdentifier (WellKnownSidType.WorldSid, null)' que devuelve un objeto SecurityIdentifier. Todo el mundo solo trabaja en instalaciones de Windows en inglés, y el otro método garantiza que sea compatible con versiones en varios idiomas. –
@trukin ¿Puedes convertirlo en una respuesta? gracias – nawfal
@nawfal: Tengo el mismo problema, y tengo que dar acceso a mi carpeta de instalación una vez que la aplicación esté instalada, pero ¿dónde puedo escribir este código? –