Come controllare se il codice viene eseguito come soluzione in modalità sandbox?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/2051

  •  16-10-2019
  •  | 
  •  

Domanda

E 'possibile verificare, dal di dentro la soluzione, se è stato distribuito come sandbox o no, ad esempio, qualcosa di simile a questo:

if(this.IamSandboxedSolution)
    // do something
else
    // do something else
È stato utile?

Soluzione

Non out-of-the-box per quanto ne so.

Si potrebbe verificare in questo modo:

if(AppDomain.CurrentDomain.FriendlyName ==
    "Sandboxed Code Execution Partially Trusted Asp.net AppDomain") {
    // I'm playing in the sandbox!
}

Altri suggerimenti

Per quanto ne sappia non esiste un modo infallibile per fare questo, purtroppo. So che Microsoft SharePoint Patterns & Practices squadra si utilizza:

AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")

Quindi, se questo è il meglio che è venuta in mente, è giusto dire che è buono come si arriva. Ovviamente qualche metodo di supporto statico è la strada da percorrere, piuttosto che avere questo controllo disseminato attraverso il codice.

EDIT:. IMHO questo è di gran lunga preferibile a eseguire un certo codice proibito e cattura l'eccezione, per motivi di Potenza

Un altro approccio altrettanto hacky sarebbe di provare a fare qualcosa che non è consentito nella sandbox e intercettare l'eccezione risultante. Qualcosa di simile a questo:

static bool? _isSandboxed;
static bool IsSandboxed() {
    if(!_isSandboxed.HasValue) {
        try {
            SPSecurity.RunWithElevatedPrivileges(delegate { });
            _isSandboxed = false;
        } catch (PolicyException) {
            _isSandboxed = true;
        }
    }
    return _isSandboxed.Value;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top