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
¿Fue útil?

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;
}
Licenciado bajo: CC-BY-SA con atribución
scroll top