Come controllare se il codice viene eseguito come soluzione in modalità sandbox?
-
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
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;
}