サンドボックスソリューションとしてコードが実行されているかどうかを確認する方法は?
-
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;
}
所属していません sharepoint.stackexchange