サンドボックスソリューションとしてコードが実行されているかどうかを確認する方法は?

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

  •  16-10-2019
  •  | 
  •  

質問

ソリューション内から、サンドボックスとして展開されているかどうかを確認することは可能ですか?

if(this.IamSandboxedSolution)
    // do something
else
    // do something else
役に立ちましたか?

解決

すぐにボックスではありません。

このように確認できます。

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

他のヒント

Afaik残念ながらこれを行うための絶対確実な方法はありません。 MicrosoftのSharePoint Patterns&Practicesチームが使用していることは知っています。

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

それが彼らが思いついた最高のものなら、それが得られるのと同じくらい良いと言うのは公平です。明らかに、いくつかの静的ヘルパー法は、このチェックをコードに散らばるのではなく、行く方法です。

編集:iMhoこれは、パフォーマンスの理由により、禁じられたコードを実行して例外をキャッチするよりもはるかに好ましいです。

同様にハッキーな別のアプローチは、サンドボックスで許可されていないことをして、結果として得られる例外をキャッチしようとすることです。このようなもの:

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