检测信任级别

Her*_*eld 8 .net c#-2.0

.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)

但是,这有点像黑客.

Ale*_*ici 7

也许这有用:

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)


Dre*_*kes 6

从.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)