Share via


Como: Solicitar permissões opcionais usando o sinalizador RequestOptional

The SecurityAction.RequestOptional sinalizar permite que você solicite um conjunto de permissões enquanto recusando todos Outros tempo de execução Outros inteligente podem ter sido disposto a fornecer permissões.Por contraste, a RequestRefuse sinalizar permite recusar permissões especificando quais seu código não deve ser concedido explicitamente.

Em contraste com usando o RequestMinimum sinalizar, o aplicativo será executado se não receber todas as permissões que você solicitar usando o RequestOptional sinalizar e um SecurityException será gerada quando o aplicativo tenta acesso um recurso protegido.Se você usar este tipo de solicitação, você deve ativar o código para capturar qualquer exceção será lançada se o seu código não é concedido a permissão opcional.

O exemplo a seguir solicita FileIOPermission usando o SecurityAction.RequestOptional sinalizar, indiretamente recusando todas as outras permissões.Este exemplo assume que uma classe hipotética Log existe no LogNameSpace. The Log classe contém o MakeLog método que cria um novo arquivo de log no computador local. Este aplicativo cria uma nova instância do Log classe e executa o MakeLog método na Tente bloco.Usando o catch palavra-chave, ela intercepta qualquer SecurityException lançada e exibirá uma mensagem.

Exemplo

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.");
         }
      }
   }
}

O código anterior cria o arquivo de log e exibirá a seguinte mensagem no console se tiver permissões suficientes:

The Log has been created.

Se o código é executado a partir de um compartilhamento e as configurações de segurança local não permita que esse código ter FileIOPermission, o código não tem permissão suficiente e exibe a seguinte mensagem:

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

Consulte também

Conceitos

Solicitando permissões

Referência

SecurityAction

FileIOPermission

UIPermission

Outros recursos

Estendendo metadados usando atributos

Segurança de Acesso de código