Comment : demander des autorisations minimales à l'aide de l'indicateur RequestMinimum
Mise à jour : novembre 2007
RequestMinimum vous permet de demander un jeu d'autorisations minimum requis pour l'exécution de votre code. En revanche, l'indicateur RequestRefuse vous permet de refuser des autorisations en spécifiant de manière explicite celles qui ne doivent pas être accordées à votre code.
Contrairement à l'utilisation de l'indicateur RequestMinimum, votre application s'exécutera si elle ne reçoit pas toutes les autorisations que vous demandez à l'aide de l'indicateur RequestOptional et une exception SecurityException sera levée lorsque votre application tentera d'accéder à une ressource protégée. Si vous utilisez ce type de demande, vous devez permettre à votre code d'intercepter toute exception qui sera levée si votre code n'a pas reçu l'autorisation optionnelle.
L'exemple suivant demande FileIOPermission à l'aide de l'indicateur RequestMinimum. L'exemple ne s'exécutera pas si l'autorisation demandée ne lui a pas été accordée. Cet exemple suppose qu'une classe hypothétique Log existe dans LogNameSpace. La classe Log contient la méthode MakeLog qui crée un nouveau fichier journal sur l'ordinateur local. Cette application crée une nouvelle instance de la classe Log et exécute la méthode MakeLog dans le bloc try. À l'aide du mot clé catch, elle intercepte l'SecurityException levée et affiche un message.
Exemple
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.");
}
}
}
}
Le code précédent crée le fichier journal et affiche le message suivant dans la console s'il a les autorisations suffisantes :
The Log has been created.
Si le code est exécuté à partir d'un partage et si les paramètres de sécurité locaux ne permettent pas à ce code d'avoir FileIOPermission, le code ne reçoit pas l'autorisation suffisante et affiche le message suivant :
This application does not have permission to write to the disk.