Gewusst wie: Anfordern optionaler Berechtigungen mit dem RequestOptional-Flag

Aktualisiert: November 2007

Mit dem SecurityAction.RequestOptional-Flag können Sie einen Berechtigungssatz anfordern, während alle weiteren Berechtigungen verweigert werden, die die Laufzeit andernfalls erteilt hätte. Dagegen können Sie mit dem RequestRefuse-Flag Berechtigungen verweigern, indem Sie diejenigen explizit angeben, über die der Code nicht verfügen soll.

Anders als bei der Verwendung des RequestMinimum-Flags wird die Anwendung ausgeführt, wenn sie nicht alle Berechtigungen erhält, die Sie über das RequestOptional-Flag angefordert haben. Außerdem wird eine SecurityException ausgelöst, wenn die Anwendung versucht, auf eine geschützte Ressource zuzugreifen. Wenn Sie diese Art der Anforderung verwenden, müssen Sie den Code so einrichten, dass er alle Ausnahmen abfängt, die ausgelöst werden, wenn der Code nicht über die entsprechende optionale Berechtigung verfügt.

Im folgenden Beispiel wird mit dem SecurityAction.RequestOptional-Flag FileIOPermission angefordert, wobei indirekt alle weiteren Berechtigungen verweigert werden. In diesem Beispiel wird davon ausgegangen, dass die hypothetische Klasse Log in LogNameSpace vorhanden ist. Die Log-Klasse enthält die MakeLog-Methode, die auf dem lokalen Computer eine neue Protokolldatei erstellt. Diese Anwendung erstellt eine neue Instanz der Log -Klasse und führt die MakeLog-Methode im try-Block aus. Mit dem Schlüsselwort catch wird jede ausgelöste SecurityException abgefangen und eine entsprechende Meldung angezeigt.

Beispiel

Imports System
Imports System.Security
'The hypothetical class log is in this namespace.
Imports LogNameSpace
Imports System.Security.Permissions
'The request is placed at the assembly level.
<assembly: FileIOPermission(SecurityAction.RequestOptional, Unrestricted := True)>

Namespace MyNamespace
   Public Class MyClass1
      
      Public Sub New()

      End Sub
      
      'Entry point that delegates to C-style main Private Function.
      Public Overloads Shared Sub Main()
         Main(System.Environment.GetCommandLineArgs())
      End Sub
      
      Overloads Public Shared Sub Main(args() As String)
         'Put any code that requires optional permissions in the try block. 
         Try
            Dim MyLog As New Log()
            MyLog.MakeLog()
            Console.WriteLine("The Log has been created.")
         'Catch the security exception and inform the user that the 
         'application was not granted FileIOPermission.
         Catch
            Console.WriteLine("This application does not have permission to write to the disk.")
         End Try
      End Sub
   End Class
End Namespace     
//The request is placed at the assembly level.
using System.Security.Permissions;
[assembly:FileIOPermission(SecurityAction.RequestOptional, Unrestricted = true)]

namespace MyNamespace {
   using System;
   using System.Security;
   //The hypothetical class log is in this namespace.
   using LogNameSpace;

   public class MyClass {
      public MyClass() {
      }

      public static void Main(string[] args) {
         //Put any code that requires optional permissions in the try block. 
         try {
            Log MyLog = new Log();
            MyLog.MakeLog();
            Console.WriteLine("The Log has been created.");
         }
         //Catch the security exception and inform the user that the 
         //application was not granted FileIOPermission.
         catch(SecurityException) {
            Console.WriteLine("This application does not have permission to write to the disk.");
         }
      }
   }
}

Mit dem vorherigen Code wird die Protokolldatei erstellt, und bei ausreichenden Berechtigungen wird die folgende Meldung auf der Konsole angezeigt:

The Log has been created.

Wenn der Code von einer Freigabe aus ausgeführt wird und die lokalen Sicherheitseinstellungen FileIOPermission für solchen Code nicht zulassen, erhält der Code nicht die ausreichende Berechtigung, und die folgende Meldung wird angezeigt:

This application does not have permission to write to the disk.

Siehe auch

Konzepte

Anfordern von Berechtigungen

Referenz

SecurityAction

FileIOPermission

UIPermission

Weitere Ressourcen

Erweitern von Metadaten mithilfe von Attributen

Codezugriffssicherheit