La clase RegistryPermission rige los permisos de seguridad alrededor de las claves de registro. Para comprobar si es posible que tenga acceso de escritura a un permiso que lo utilice de la siguiente manera:
RegistryPermission perm1 = new RegistryPermission(RegistryPermissionAccess.Write, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
A continuación, utilizar el método de la "demanda" en un try/catch y regresar en caso de fallo (la crianza de un valor excepción). En caso de éxito, continuaría y realizaría su actualización. Aunque esto no es exactamente lo que quiere, verificar los permisos antes del acceso, es la forma aceptada de garantizar que tenga los permisos que necesita antes de operar con las claves.De una manera más o menos estructurado esto equivaldría a:
try
{
RegistryPermission perm1 = new RegistryPermission(RegistryPermissionAccess.Write, @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
perm1.Demand();
}
catch (System.Security.SecurityException ex)
{
return;
}
//Do your reg updates here
EDIT: Pensando en lo que he mencionado en el comentario, aquí están los métodos de extensión a la clase RegistryPermission para comprobaciones de permisos:
using System.Security.Permissions;
using System.Security;
public static class RegistryExtensions
{
public static bool HavePermissionsOnKey(this RegistryPermission reg, RegistryPermissionAccess accessLevel, string key)
{
try
{
RegistryPermission r = new RegistryPermission(accessLevel, key);
r.Demand();
return true;
}
catch (SecurityException)
{
return false;
}
}
public static bool CanWriteKey(this RegistryPermission reg, string key)
{
try
{
RegistryPermission r = new RegistryPermission(RegistryPermissionAccess.Write, key);
r.Demand();
return true;
}
catch (SecurityException)
{
return false;
}
}
public static bool CanReadKey(this RegistryPermission reg, string key)
{
try
{
RegistryPermission r = new RegistryPermission(RegistryPermissionAccess.Read, key);
r.Demand();
return true;
}
catch (SecurityException)
{
return false;
}
}
}
Como regla general, las claves de máquina locales requieren permiso de administrador pero las claves de usuario actuales no. – Brian
Gracias Brian, por lo que es seguro asumir que puedo escribir en esta clave (que se dirigirá a la tecla de usuario) y simplemente mantener la opción habilitada en todo momento, y luego solo manejar las excepciones que pueda arrojar si falla. – Beardy