.NET应用程序如何检测运行它的信任级别?
具体来说,我想要一种方法来做类似的事情
if (RUNNING IN GREATER THAN MEDIUM TRUST) {
// set private fields & properties using reflection
}
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案是使用
public static class CodeAccessSecurityTool {
private static volatile bool _unrestrictedFeatureSet = false;
private static volatile bool _determinedUnrestrictedFeatureSet = false;
private static readonly object _threadLock = new object();
public static bool HasUnrestrictedFeatureSet {
get {
if (!_determinedUnrestrictedFeatureSet)
lock (_threadLock) {
if (!_determinedUnrestrictedFeatureSet) {
try {
// See if we're running in full trust
new PermissionSet(PermissionState.Unrestricted).Demand();
_unrestrictedFeatureSet = true;
} catch (SecurityException) {
_unrestrictedFeatureSet = false;
}
_determinedUnrestrictedFeatureSet = true;
}
}
return _unrestrictedFeatureSet;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这有点像黑客.
也许这有用:
ActivationContext ac = AppDomain.CurrentDomain.ActivationContext;
ApplicationIdentity ai = ac.Identity;
var applicationTrust = new System.Security.Policy.ApplicationTrust(ai);
var isUnrestricted = applicationTrust.DefaultGrantSet.PermissionSet.IsUnrestricted();
Run Code Online (Sandbox Code Playgroud)
要么
AppDomain.CurrentDomain.ApplicationTrust
.DefaultGrantSet.PermissionSet.IsUnrestricted();
Run Code Online (Sandbox Code Playgroud)
从.NET 4.0开始,该AppDomain.IsFullyTrusted属性可能会有所帮助.
如果您希望在当前应用领域进行测试,请使用:
if (AppDomain.CurrentDomain.IsFullyTrusted)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
Her*_*eld -1
public static class CodeAccessSecurity {
private static volatile bool _unrestrictedFeatureSet = false;
private static volatile bool _determinedUnrestrictedFeatureSet = false;
private static readonly object _threadLock = new object();
public static bool HasUnrestrictedFeatureSet {
get {
#if __IOS__
return false;
#elif __ANDROID__
return false;
#else
if (!_determinedUnrestrictedFeatureSet)
lock (_threadLock) {
if (!_determinedUnrestrictedFeatureSet) {
_unrestrictedFeatureSet = AppDomain.CurrentDomain.ApplicationTrust == null || AppDomain.CurrentDomain.ApplicationTrust.DefaultGrantSet.PermissionSet.IsUnrestricted();
_determinedUnrestrictedFeatureSet = true;
}
}
return _unrestrictedFeatureSet;
#endif
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1675 次 |
| 最近记录: |