Cómo comprobar si el código se ejecuta como solución de espacio aislado?
-
16-10-2019 - |
Pregunta
¿Es posible comprobar, desde dentro de solución, si se implementa como un recinto de seguridad o no, por ejemplo, algo como esto:
if(this.IamSandboxedSolution)
// do something
else
// do something else
Solución
No es fuera de la caja que yo sepa.
Usted puede comprobar de esta manera:
if(AppDomain.CurrentDomain.FriendlyName ==
"Sandboxed Code Execution Partially Trusted Asp.net AppDomain") {
// I'm playing in the sandbox!
}
Otros consejos
Que yo sepa no hay una manera infalible de hacer esto por desgracia. Yo sé SharePoint Patterns & Practices equipo de Microsoft están utilizando:
AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")
Así que si eso es lo mejor que han inventado, es justo decir que es tan bueno como se pone. Obviamente, algunos método de ayuda estático es el camino a seguir en lugar de tener esta comprobación llena a través de su código.
EDIT:. En mi humilde opinión esto es mucho más preferible a la ejecución de un código prohibido y agarrar la excepción, debido a razones de Potencia
Otro enfoque igualmente hacky sería la de tratar de hacer algo que no está permitido en el recinto de seguridad y detectar la excepción resultante. Algo como esto:
static bool? _isSandboxed;
static bool IsSandboxed() {
if(!_isSandboxed.HasValue) {
try {
SPSecurity.RunWithElevatedPrivileges(delegate { });
_isSandboxed = false;
} catch (PolicyException) {
_isSandboxed = true;
}
}
return _isSandboxed.Value;
}