Gewusst wie: Anfordern von Mindestberechtigungen mit dem RequestMinimum-Flag
Aktualisiert: November 2007
Das RequestMinimum-Flag ermöglicht es Ihnen, einen minimalen Satz von Berechtigungen anzufordern, die zur Ausführung des Codes erforderlich sind. Dagegen können Sie mit dem RequestRefuse-Flag Berechtigungen verweigern, indem Sie die Berechtigungen explizit angeben, die dem Code nicht erteilt werden sollen.
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 FileIOPermission mit dem RequestMinimum-Flag angefordert. Das Beispiel wird nicht ausgeführt, wenn ihm die angeforderte Berechtigung nicht erteilt wurde. 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 catch-Schlüsselwort 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.RequestMinimum, 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.RequestMinimum, 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.