Как проверить, работает ли код в качестве решения в песочнице?

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

  •  16-10-2019
  •  | 
  •  

Вопрос

Можно ли проверить из решения, было ли оно развернуто в виде песочницы или нет, например, что -то вроде этого:

if(this.IamSandboxedSolution)
    // do something
else
    // do something else
Это было полезно?

Решение

Не из ящика Afaik.

Вы можете проверить это так:

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

Другие советы

Afaik, к сожалению, нет надежного способа сделать это. Я знаю, что команда Microsoft SharePoint Matters & Practices использует:

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

Так что, если это лучшее, что они придумали, справедливо сказать, что это так же хорошо, как и. Очевидно, что какой -то статический вспомогательный метод - это путь, а не проходить эту проверку через ваш код.

РЕДАКТИРОВАТЬ: ИМХО это гораздо предпочтительнее запуска некоторого запретного кода и поймать исключение из -за причин PERF.

Другим одинаково хакерским подходом было бы попытаться сделать что -то, что не допускается в песочнице, и поймать полученное исключение. Что-то вроде этого:

static bool? _isSandboxed;
static bool IsSandboxed() {
    if(!_isSandboxed.HasValue) {
        try {
            SPSecurity.RunWithElevatedPrivileges(delegate { });
            _isSandboxed = false;
        } catch (PolicyException) {
            _isSandboxed = true;
        }
    }
    return _isSandboxed.Value;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top